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

Kommentare:

GeneralUnkown hat gesagt…

Interessant, nur kommt bei mir:
login: can't chdir to home directory ''

nach dem log in.
Und:

$ reboot
-sh: reboot: not found

Anonym hat gesagt…

Malaysia & Singapore & brunei best on-line blogshop for wholesale & quantity korean add-ons,
earrings, earstuds, locket, rings, hair, bangle & trinket
accessories. Deal 35 % wholesale price cut. Ship Worldwide
Feel free to surf my page : sitter services

Anonym hat gesagt…

Malaysia & Singapore & brunei ultimate online blogshop for wholesale & quantity korean add-ons, accessories, earstuds, choker, rings, bracelet,
trinket & hair accessories. Promotion 35 % wholesale discount. Ship Worldwide
Visit my blog - Sonos reviews

Boris Kraft hat gesagt…

Hi

der Asus hat doch auch Downloadtools on board. Ich würde gerne mein Premium Account Hoster Files direct vom Router ziehen lassen, hast du damit schon was zu tun gehabt ?!

MFG Micha

System-Administrator-Tipps hat gesagt…

Hi,
ja, es gibt für die Asus Router eine Software "Download Master", die ein Rechner-loses Runterladen von Dateien ermöglicht, siehe
http://www.asus.de/Networks/Features/Continuous_Downloading_when_PC_is_off/

Hab das allerdings nie ausprobiert und bin in der Zwischenzeit eh auf eine FritzBox 7390 umgestiegen, da ich auch Telefon-Anlagen-Funktionalität brauchte.

Falls Du ein QNAP / Synology oder sonstwie Linux-basiertes NAS hast, könnte für das Premium-Downloaden auch pyLoad für Dich interessant sein.

Gruß
Gerhard