Zum Thema Reconnect und Beziehen einer neuen IP gibt es im Internet eine relativ große Anzahl von Lösungen. Auf gulli gibt es bereits fertige Implentierung zum herunterladen. Was mich an diesen Implementierungen ein wenig stört gestört hat ist, dass der Quellcode bei diesen .exe Dateien meistens nicht zur Verfügung gestellt wird. Kleine .exe Dateien erwecken bei mir nicht gerade einen „seriösen“ Eindruckt.
Deshalb möchte ich hier nun meinen Beitrag zum Thema reconnect leisten. Meine Implentierung ist ein kleines Java Programm, das den reconnect bei einer Fritz!Box automatisch durchführt. Damit das Programm funktioniert muss auf der FritzBox UPNP aktiviert sein.
Wie in den meisten anderen Implementierungen sendet auch mein Programm eine sogenannte XML-SOAP message an die FritzBox.
<?xml version="1.0" encoding="utf-8"?> <s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <u:ForceTermination xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1" /> </s:Body> </s:Envelope> |
Diese SOAP Message bewirkt, dass die Fritz!Box ihre Internetverbindung terminiert und einen reconnect durchführt. Der Router erhält somit eine neue IP-Adresse. Den Quellcode möchte ich hier nicht im Einzelnen erklären. Wer sich ein wenig mit Java auskennt sollte eigentlich keine größeren Verständnisprobleme haben. Um es ausführen zu können sollte auf dem Rechner natürlich eine JRE installiert sein.
Eine ausführbare .jar Datei (einfach doppelklicken), sowie die Quellcode Datei können hier heruntergeladen werden:
ReconnectFritz (executable .jar file)
ReconnectFritz (Java Source file)
Die Datei kann kann dann beispielsweise in JDownloader eingebunden werden:
Quellcode des Java-FritzBox-Reconnect Programms:
import java.net.*; import java.io.*; public class PostSOAP { public static void main(String[] args) { sendSOAP(); System.exit(0); } public static void sendSOAP(){ try { String xmldata = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+ "<s:Envelope s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+ "<s:Body>"+ "<u:ForceTermination xmlns:u=\"urn:schemas-upnp-org:service:WANIPConnection:1\" />"+ "</s:Body>"+ "</s:Envelope>"; //Create socket String hostname = "fritz.box"; int port = 49000; InetAddress addr = InetAddress.getByName(hostname); Socket sock = new Socket(addr, port); //Send header BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8")); wr.write("POST /upnp/control/WANIPConn1 HTTP/1.1"); wr.write("Host: fritz.box:49000" + "\r\n"); wr.write("SOAPACTION: \"urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination\""+"\r\n"); wr.write("Content-Type: text/xml; charset=\"utf-8\""+"\r\n"); wr.write("Content-Length: " + xmldata.length() + "\r\n"); wr.write("\r\n"); //Send data wr.write(xmldata); wr.flush(); } catch (Exception e) { e.printStackTrace(); } } } |
Danke für den Code! Funktioniert genauso mit meiner FRITZ!Box WLAN 3170!
cooles programm. endlich keine langen wartezeiten mehr ;D
danke^^
Woher hast du denn eigentlich die Infos über das betreffende Endpoint? Eine WSDL-Datei scheint ja jedenfalls nirgends auffindbar zu sein 🙁 Hast du einfachmal mit Wireshark gelauscht 😉 Würd mich mal interessieren!
Grüße,
GreenPepper
Hi.
AVM gibt leider zu hierzu keine Informationen raus. Hab die Nachrichten aus einem anderen Forum kopiert, denke das es dort von jemand gesnifft wurde….
Gruß
Hab hierzu mal was entdeckt: http://www.ip-phone-forum.de/showthread.php?t=146304&s=7acdab45f12e34c7e0181771bda47824&p=1184638&viewfull=1#post1184638. Ich finds ja sowieso komisch, dass man das ohne Authentifizierung anscheinend einiges machen kann, an sich ist das ja eine potenzielle Angriffsstelle..
Sehr guter Link. Damit kann man wirklich einiges machen…