Samstag, 2. Juli 2011

Asus RT-N56U, automatisierter Reconnect für JDownloader

Zum JDownloader muss man wahrscheinlich nicht viel sagen, die Anwendung dürfte bei Benutzern von Sharehostern einer der beliebtesten Download-Manager sein.

Eine Frage, die sich für jeden JDownloader-Benutzer stellt (wenn er nicht gerade bei jedem Hoster einen Premium-Account hat), lautet: “Wie bringe ich meinem Router bei, sich eine neue, externe IP zu holen?”

Bei meinem Router Asus RT-N56U ist eine mögliche Lösung ein automatisierter Telnet-Aufruf.

In der Web-Oberfläche des Routers wird der Telnet-Zugang aktiviert:image

Danach kann man per “telnet router-ip” eine Telnet-Verbindung  in der DOS-Box zum Router aufbauen (Zugangsdaten sind die gleichen wie für die Web-Oberfläche), landet in einer Linux-Command-Shell (die Router-Firmware basiert auf Linux) und kann dort per Kommando “reboot” den Router neu starten:
image

Hinweis: bei Win-Vista und Win-7 wird der Telnet-Client nicht automatisch installiert, ist ggf. über 
–> Systemsteuerung –> Programme und Funktionen –> Windows-Funktionen aktivieren oder deaktivieren
hinzuzufügen.

Ein Aufruf von www.wieistmeineip.de vor und nach der Aktion zeigt, dass sich die externe IP tatsächlich verändert hat (nach dem Router-Reboot ggf. ein oder zwei Minuten warten, denn das WLAN ist logischerweise eine Weile weg).

Nun muss der ganze Vorgang natürlich noch automatisiert werden. Einen vernünftigen Freeware-Telnet-Client für Windows, der batch-fähig ist, konnte ich nicht finden, daher hab ich mir mit AutoIt ein Bildschirm-Makro erstellt, das die Windows-eigene telnet.exe startet und ihr die benötigten Tastatur-Eingaben unterjubelt. Folgender Quellcode (Router-IP und Passwort natürlich anzupassen) wird als Datei reconnect_asus_router.au3 abgespeichert:

Run("telnet 192.168.2.1")
Sleep(3000)
WinWaitActive("Telnet 192.168.2.1")
Send("admin")
Send("{ENTER}")
Sleep(3000)
Send("hier_steht_das_Passwort")
Send("{ENTER}")
Sleep(3000)
Send("reboot")
Send("{ENTER}")
WinClose("Telnet 192.168.2.1")

Per –> Rechtsklick –> Compile Script kann man sich auch eine reconnect_asus_router.exe daraus erstellen, die dann auch auf Windows-Rechnern ausführbar ist, auf denen keine AutoIt installiert ist.

Unter Linux gibt es für kommandozeilenbasierte Anwendungen wie telnet, ftp usw. ein Automatisierungstool namens expect.

Unter Ubuntu geht die Installation von expect so:
sudo apt-get install expect
sudo apt-get install expect-dev

Man kann ein expect-Skript für die Automatisierung von telnet auch “von Hand” erstellen, meine Versuche diesbezüglich waren aber nicht von Erfolg gekrönt. Es wird wohl schon seinen Grund haben, dass es ein 600-seitiges Buch über expect gibt…

Zum Glück gibt es aber autoexpect, damit kann man die telnet-Sitzung zum Asus-Router inkl. reboot-Befehl in ein expect-Skript aufzeichnen lassen. Das geht so:

1. Pfeil: autoexpect wird aufgerufen, der –f Schalter gibt an, dass das aufgezeichnete Skript reconnect_asus_router.sh heißen soll, das “telnet 192.168.2.1” gibt an, dass eine telnet-Sitzung auf diese IP-Adresse aufgezeichnet werden soll.

2. Pfeil: autoexpect gibt die Info aus, dass die Skript-Aufzeichnung gestartet wurde

3. Pfeil: Asus-Router fragt nach login, es wird eingegeben

4. Pfeil: Asus-Router fragt nach Passwort, es wird eingegeben

5. Pfeil: am Kommandoprompt des Routers wird der reboot-Befehl ausgeführt

6. Pfeil: einmal ENTER-Taste führt zum Schließen der Telnet-Sitzung

7. Pfeil: autoexpect gibt die Info aus, dass die Skript-Datei aufgezeichnet wurde und beendet sich

2

Auf diese Weise wurde ein Skript erzeugt, dass sich mit ./reconnect_asus_router.sh aufrufen lässt und zum Reboot des Asus-Routers führt.

So sieht das Skript aus:

set timeout -1
spawn telnet 192.168.2.1
match_max 100000
expect -exact "Trying 192.168.2.1...\r
Connected to 192.168.2.1.\r
Escape character is '^\]'.\r
\r\r
RT-N56U login: "
send -- "admin\r"
expect -exact "admin\r
Password: "
send -- "hier_steht_das_passwort\r"
expect -exact "\r
\r
\r
BusyBox v1.12.1 (2011-05-11 17:19:46 CST) built-in shell (ash)\r
Enter 'help' for a list of built-in commands.\r
\r
# "
send -- "reboot\r"
expect -exact "reboot\r
# "
send -- "\r"
expect eof

Im JDownloader wird das Reconnect-Skript so hinterlegt:3

Donnerstag, 23. Juni 2011

Web- und Samba-Zugriff auf Android-Handy automatisch starten, sobald es am Ladekabel hängt

Ein Android-Feature, das ich besonders gerne mag, ist die Möglichkeit, über das heimische oder Büro-WLAN auf die Daten auf der SD-Karte zuzugreifen oder Funktionen des Handys zu nutzen.

Mit Remote Web Desktop kann man per Browser-Aufruf http://ip-adresse:8080 auf Android zugreifen und dann recht bequem (im Vergleich zur Touchscreen-(Ver)tipperei auf dem Handy) SMS verschicken und Screenshots erstellen (braucht root). Mit dem Remote Control Add-on lässt sich Remote Web Desktop noch um eine VNC-basierte Fernwartung erweitern (braucht root).

Mit Samba Filesharing kann man die Daten der SD-Karte so freigeben, dass sie in der Netzwerkumgebung von Windows sichtbar sind. Natürlich kann man sein Telefon auch per USB-Kabel mit dem PC verbinden und dann wie auf eine USB-Platte im Windows-Explorer zugreifen. Nur wer will schon den Kabelsalat, wenn er mit dem Notebook auf dem Sofa sitzt…? Üblicherweise hängt das Handy bei mir anderswo in der Wohnung an der Steckdose.

Was mich anfangs nervte: durch die per DHCP zugewiesenen Adressen wechselte gelegentlich die LAN-IP-Adresse, so dass ich vor dem Zugriff vom PC aus immer erst auf dem Handy-Display schauen musste, welche IP gerade aktuell war. Lässt sich bei den meisten WLAN-Routern dadurch lösen, dass man im DHCP-Server einstellt, für die MAC-Adresse des Handys immer die gleiche IP zu vergeben, bei meinem Asus RT-N56U geht das so:

image

Ebenfalls nervig am Anfang: immer erst das WLAN aktivieren und die Fernzugriffsprogramme starten müssen. Ist aber gar nicht nötig, wenn man mit Hilfe von PowerFi dafür sorgt, dass das WLAN immer dann eingeschaltet wird, wenn das Handy am Strom hängt…

image

… und bei Remote Web Desktop einstellt, dass es sich in bestimmten WLANs automatisch aktiviert:

image

Samba Filesharing verhält sich eh von Haus aus so, dass es sich bei aktiviertem WLAN startet.