Reconnect-Skript unter Linux

Mr. Brooks

Mitglied
Mitglied seit
6 Okt 2013
Beiträge
245
Punkte für Reaktionen
0
Punkte
16
Hi,

schon seit einer Weile bin ich auf der Suche nach einem Reconnect-Skript unter Ubuntu. Bei Windows 7 hatte ich ein kelines Tool mal heruntergeladen, tat seinen Dienst jahrelang. Ich habe hier https://wiki.ubuntuusers.de/pyLoad/#Reconnect-Script-fuer-FritzBox und hier https://wiki.ubuntuusers.de/FritzBox/Skripte/#ffentliche-IP-Adresse-aendern 2 Möglichkeiten gefunden, die aber beide nicht funktionieren. Ich habe die 7490 mit Firmware 6.83.

Beim 1. Skript (aus dem Pyload-Artikel) kommt:

Code:
./reconnect.sh
curl: (6) Could not resolve host: fritz.box

Auch im Browser komme ich über "fritz.box" nicht mehr zur FB-Oberfläche. Es geht nur über die Eingabe der IP. Keine Ahnung seit wann das nicht mehr geht oder ob es unter Linux generell nicht geht, ich verwende immer die IP. Im Skript geht die IP aber nicht. Wenn ich fritz.box durch die IP ersetze kommt wenn ich das "http:" vor der IP stehen lasse

Code:
./reconnect.sh
curl: (35) gnutls_handshake() failed: An unexpected TLS packet was received.

oder ohne das http:

Code:
./reconnect.sh
curl: (3) <url> malformed

Bei der 2. Variante passiert nichts. Ich habe das letzte Skript mit 'wget' versucht. Starte ich dieses Skript kommt keinerlei Rückmeldung im Terminal, es wird aber auch keine neue IP angefordert (aus dem Log auf der FritzBox zu sehen).

Curl ist unter Ubuntu installiert. UPnP sollte auf der Fritzbox aktiviert sein, mein HTPC (Kodi) und auch mein Fernseher finden über deren UPnP-Browser Inhalte auf der Fritzbox. Die konkrete Einstellung habe ich aber bisher nicht auf der Fritzbox gefunden. Da wo sie laut Google liegen sollte (Heimnetzwerk / Netzwerk) gibt es nichts. Scheinbar wurde hier mit einem Firmware-Update die Menüstruktur geändert.
 
Wie genau gibst du das an, wenn curl malformed url antwortet? Und hast du auf dem Linux die Fritzbox als DNS-Server oder andere/zusätzliche?
 
Das ganze Skript sieht dann so aus:

Code:
#!/bin/bash
curl "//192.168.10.1:49000/upnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction: urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination" -d "@data.txt"

Unter Ubuntu habe ich im Netzwerkmanager eine statische IP eingerichtet und da beim DNS-Server 8.8.8.8 eingetragen. Bei Gateway steht 192.168.10.1. Keine Ahnung ob das so sein musste oder ob es anders nicht funktioniert hat. Der Netzwerkmanager ist manchmal etwas schwierig, ich war aber froh es ohne Änderungen an der /etc/network/interfaces hinbekommen zu haben. Sollte man den DNS-Server auch auf 8.8.8.8 stellen? Ich erinnere mich dunkel, dass ich auf dem Raspberry in der dhcpd.conf bei beiden (DNS-Server und Gateway) die IP der Fritzbox eingetragen aber. Was genau ich da mache, muss ich zugeben, weiß ich aber nicht. :confused:
 
Zum einen: Das URL-Format mit // am Anfang funktioniert zumindest bei meinem curl nicht und resultiert in (3) <url> malformed. Entweder mit htttp und Doppel-Slash oder beides weglassen.

Zum andern: Wenn dein Ubuntu bei 8.8.8.8 nach der Auflösung für fritz.box fragt, ist es klar, dass das nicht funktioniert. fritz.box kann nur von der Fritzbox aufgelöst werden. Also entweder nimmst du den DNS-Server, den die Fritzbox per DHCP liefert (da müsste sie selbst sein) oder du stellst fest die IP der Fritzbox ein oder du verwendest die Domain fritz.box eben nicht, sondern nur die IP-Adresse.
 
Ich hab jetzt im Netzwerkmanager den DNS-Server auf 192.168.10.1 gesetzt, das ist die IP der Fritzbox. Wenn ich das Skript so ausführe wie es hier https://wiki.ubuntuusers.de/pyLoad/#Reconnect-Script-fuer-FritzBox steht (also mit 'fritz.box') kommt weiterhin die gleiche Meldung:

Code:
curl: (6) Could not resolve host: fritz.box

Nehme ich stattdessen die IP wie von dir vorgeschlagen kommt:

Code:
curl "192.168.10.1:49000/upnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction: urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination" -d "@data.txt"

Code:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:schemas-upnp-org:control-1-0">
<errorCode>401</errorCode>
<errorDescription>Invalid Action</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>

Es wird quasi der Inhalt der Datei 'data.txt' ausgegeben.

Das gleiche passiert wenn ich mit http: und Doppelslash ausführe. Das Skript sieht dann so aus:

Code:
curl "http://192.168.10.1:49000/upnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction: urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination" -d "@data.txt"
 
Probier einfach mit "ping fritz.box" ob die IP erforderlich ist.

Die richtige Adresse
So ist es auch mit "aktuellen" Firmwares schon lange nicht mehr möglich, siehe...
https://www.ip-phone-forum.de/threa...e-gesucht-fritz-os-06-50.287835/#post-2183121

curl_reconnect.sh
Code:
#!/bin/sh
curl "http://fritz.box:49000/igdupnp/control/WANIPConn1" \
-H "Content-Type: text/xml; charset="utf-8"" \
-H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination" \
-d "<?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>"
Funktioniert trotz aktiver "Bestätigen" Sicherheitsfunktion.
 
Zuletzt bearbeitet:
@ koyaanisqatsi

Heißt das jetzt, dass es gar nicht mehr geht oder nur nicht mehr so wie ich es oben versucht hatte? Wenn ich

Code:
curl "192.168.10.1:49000/igdupnp/control/WANIPConn1"

versuche kommt

Code:
curl "192.168.10.1:49000/igdupnp/control/WANIPConn1"
<HTML><HEAD><TITLE>404 Not Found (ERR_NOT_FOUND)</TITLE></HEAD><BODY><H1>404 Not Found</H1><BR>ERR_NOT_FOUND<HR><B>Webserver</B> Sun, 24 Sep 2017 16:10:33 GMT</BODY></HTML>
 
Nee, das war mal farblich hervorgehoben und nicht komplett.
Probier mal das komplette Skript aus Post #6 und schau ins Ereignislog deiner Fritz!Box.
 
Hier mein Reconnect-Skript auf Basis von netcat:

Code:
#!/bin/sh

netcat -w 1 192.168.178.1 49000 <<EOF
POST /igdupnp/control/WANIPConn1 HTTP/1.1
HOST: fritz.box:49000
SOAPACTION: "urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination"
CONTENT-TYPE: text/xml ; charset="utf-8"
CONTENT-LENGTH: 288

<?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>
EOF
 
  • Like
Reaktionen: koyaanisqatsi
Moin Whoopie

Gefällt mir, da reicht dann auch der busybox nc und kann direkt als Funktion in die laufende Bash (whatever) inkludiert werden...

fbrecon (Schnöde Textdatei ohne das x Flag)
Code:
fbrecon () {
nc -w 1 192.168.178.1 49000 <<EOF
POST /igdupnp/control/WANIPConn1 HTTP/1.1
HOST: fritz.box:49000
SOAPACTION: "urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination"
CONTENT-TYPE: text/xml ; charset="utf-8"
CONTENT-LENGTH: 288

<?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>
EOF
}
:rolleyes: ( Und klappt natürlich auch auf den Androiden ohne curl )

Anwendungsbeispiel
Screenshot_2017-09-25-13-44-05.png
 
Zuletzt bearbeitet:
[...] da reicht dann auch der busybox nc und kann direkt als Funktion in die laufende Bash (whatever) inkludiert werden...

fbrecon (Schnöde Textdatei ohne das x Flag)
Irgendwie bin ich gerade verwirrt...

Wie füttert man korrekt unter Ubuntu die Shell und unter Android (10) mit ConnectBot?
 
Zuletzt bearbeitet:
Ich nehme dafür unter Android (bei mir noch Pie) nicht ConnectBot sondern Termux. Das ist für SSH von Android aus eher ungeeignet - obwohl es grds. geht - aber man kann i.V.m. Tasker sehr einfach Scripte ausführen.
 
Moin


Android 10
Keine Ahnung, hab hier 4.2 , 7.0 und 9.
Ab 7.0 wirds schon schwierig ein beschreibbares Verzeichnis zu finden.
Meine Aussage damals bezog sich noch auf 4.2.

Beispiel HUAWEI Media Tablet ( 7.0 )
Screenshot_20200407-110756.png

Ubuntu
Ist auch nur ein Linux ;) ( Debianbasiert )
Das Skript fbrecon wird mittels . in die aktuelle Shell als Funktion inkludiert.
Dabei passiert erstmal nichts, keine Ausgabe.
Das ist üblich unter Linux, kein Fehler, keine Ausgabe.
...abgesehen von der Tatsache, dass "fbrecon", das Skript als auch die Funktion, keine Fehlerbehandlung machen.
Danach ist das Kommando "fbrecon" Pfadunabhängig verfügbar.
Also einfach mal tippen: fbrecon
...und die Eingabetaste drücken.
Die Funktion kann mit "set" ausgegeben werden.

CGI
Unabhängig vom OS des Mobilen Gerätes, nur eine Verbindungsmöglichkeit zu deinen Ubuntu Apache2 Webserver bedarf es dazu.
Das CGI Verzeichnis befindet sich bei mir: /usr/lib/cgi-bin
Da kommt das Skript "fbrecon" rein.
Dann die Datei "fbrecon.cgi" darin erstellen, mit folgenden Inhalt...
fbrecon.cgi
Code:
#!/bin/sh
. /usr/lib/cgi-bin/fbrecon
echo "Content-Type: text/plain
"
fbrecon
Die Rechte in cgi-bin setzen...
Code:
chown -v www-data.www-data /usr/lib/cgi-bin/fbrec*
chmod -v u=rwx,g=,o= /usr/lib/cgi-bin/fbrec*
...ausprobieren, auch mit den Mobiles ;) ...
Screenshot_20200407-120747.png

Jetzt verstanden?
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.