Suche Script für FBF für automatischen Reconnect bei unerwünschter IP

gillem

Neuer User
Mitglied seit
6 Aug 2010
Beiträge
18
Punkte für Reaktionen
1
Punkte
3
Ist jemanden für die Fritzbox ( 7170 ) ein Patch bekannt
das bei Zuteilung einer IP aus einem bestimmten IP-Bereich
die Inet-Verbindung wieder neu aufbaut bis eine IP aus
einem besseren Bereich zugewiesen wird? Ziel des ganzen
sind die sehr unterschiedlichen Vorraussetzungen der von
1und1 verwendeten Server.

Wird hier eine IP aus dem Bereich 88.xxx.xxx xxx zugewiesen
"schleichen" die Übertragungen mit 8Mbit bis 10Mbit daher :mad:,
wird eine IP aus dem Bereich 94.220.xxx.xxx zugewiesen
kommt man beim 16.000er DSL hier zumindest auf 12Mbit
bis ( wenn man mal Glück hat ) 13.4Mbit.

Schätze mal es könnte auch per Shellscript gehen wenn es ein
Script gibt in der 7170 das sowieso immer automatisch nach
einem Reconnect ausgeführt wird? :confused:
 
Zuletzt bearbeitet:
Stichwort: onlinechanged
 
rc.custom würde auch gehn. D. h. Freetz auf die Box.;)
Evtl. hat jemand eine Lösung ohne Freetz.

EDIT:
In Freetz könntest Du mit diesem einfachen Skript, ein reboot druchführen lassen:
Code:
#!/bin/sh
if [ "$(get_ip -d | cut -c 1-3)" -eq [COLOR="Red"][B]188[/B][/COLOR] ]; then
reboot
fi
 
Zuletzt bearbeitet:
Naja, er muss ja nicht gleich einen Reboot machen, daher mein Vorschlag mit onlinechanged: Immer wenn sich z.B. die IP ändert, wird das Skript ausgeführt (hast Du da nicht das WebIF gemacht?)
 
Naja, er muss ja nicht gleich einen Reboot machen, ...
Er will ja von seinem Provider eine neue (andere) öffentliche IP-Adresse haben, ohne 188.###.###.###. Wenn das auch ohne reboot der Box geht, ... ok. Dann kann das Skript ja was anderes veranlassen.;)
 
Zuletzt bearbeitet:
Ich wollte eigentlich die original Firmware behalten, müßte
also nur wissen ob und welches Script ggf. nach einer
Neueinwahl ausgeführt wird denn könnte ich es dort reinbasteln....

Reboot dürfte eigentlich nicht nötig sein ein:
dsld -s
dsld -n


dürfte ausreichen.....
 
Schau dir mal diesen Auszug aus dem get_ip-Skript an. Evtl. geht es damit, in Kombination mit meinem abgeänderten Skript:

Code:
""|-w|--webcm)
                if [ "$(sed -ne '/var:n\[/p' $queryfile)" != "" ]; then
                       [COLOR="Red"] querystring="var:n[0]=connection0:pppoe:status/ip"[/COLOR]
                else
                       [COLOR="Red"] querystring="var:cnt=1&var:n0=connection0:pppoe:status/ip"[/COLOR]
                fi
                [COLOR="Red"]ip=$(/usr/www/html/cgi-bin/webcm "getpage=${queryfile}&${querystring}")[/COLOR]
                retval=$?
                ;;
 
@gillem: Irgendwo auf der Box befindet sich ein Script namens "onlinechanged", das immer dann aufgerufen wird, wenn die Box eine INet-Verbindung hergestellt sowie getrennt hat.
Damit, sowie mit sf3978´s Fund und "dsld -s; dsld -n" sollte es funktionieren, wenn man es richtig zusammenbastelt.
 
rc.custom würde auch gehn.

Beim Booten der Box (ob über debug.cfg oder rc.custom) ist es der falsche Zeitpunkt. Erstens kann es sein, daß die Box zu diesem Zeitpunkt noch gar keine Verbindung aufgebaut hat. Und zum anderen wird die Verbindung jeden Tag getrennt, und da wird normalerweise kein Neustart ausgeführt. Die richtige Stelle ist also onlinechanged.
 
... ist es der falsche Zeitpunkt. Erstens kann es sein, daß die Box zu diesem Zeitpunkt noch gar keine Verbindung aufgebaut hat. ...
OK, onlinechanged ist dann richtig. Der falsche Zeitpunkt mit der rc.custom wäre nicht das Problem, denn es gibt ja auch die Funktion sleep oder entsprechende Einstellungen im Freetz-Web-IF für rc.*-Skripte im /etc/init.d/-Verzeichnis.
 
@gillem: Irgendwo auf der Box befindet sich ein Script namens "onlinechanged", das immer dann aufgerufen wird, wenn die Box eine INet-Verbindung hergestellt sowie getrennt hat.

Mein Problem im Moment ist das ich weder /bin/onlinechanged bearbeiten
kann noch ( wie es eigentlich vorgesehen ist ) ein eigenes Script
in /etc/onlinechanged/ kopieren kann da:
-sh: cannot create /bin/onlinechanged: Read-only file system

b.z.w.

-sh: cannot create /etc/onlinechanged/reconnect: Read-only file system

....ich also keinen Schreibzugriff habe....
 
Die eigene IP kann man auch sehr schön mit "showdslstat" heraus bekommen.
...
Ja, und genau das macht "get_ip -d" im Skript aus Beitrag #3.;)
Code:
case $1 in
	[COLOR="Red"]-d[/COLOR]|--dsld)
		ip=$(/sbin/[COLOR="red"]showdsldstat[/COLOR] | grep "0: ip" | cut -d\/ -f1 | cut -d ' ' -f3)
		retval=$?
		;;
 
echo "dein script-zeug">/var/script.sh
mount -o bind /var/script.sh /etc/onlinechanged

Wenn Du das in die debug.cfg einträgst, sollte es einen Reboot überleben.
 
@u.g: Es geht sogar noch etwas kürzer: klick. Ob 1x sed allerdings günstiger ist als 2x cut habe ich nicht getestet...
 

mount -o bind /var/script.sh /etc/onlinechanged


ok... auf das richtige kommt man manchmal nicht ;) jetzt läufts so
wie es soll..... ob's einfacher geht oder nicht hab jetzt die debug.cfg
wie folgt zusammengebastelt :

PHP:
###

mkdir /var/flash/onlinechanged
echo "#!/bin/sh" > /var/flash/onlinechanged/reconnect.sh
echo "if [ -f /var/flash/busybox-mipsel ]; then" >> /var/flash/onlinechanged/reconnect.sh
echo "echo \"richtige busybox vorhanden.....\"" >> /var/flash/onlinechanged/reconnect.sh
echo "else" >> /var/flash/onlinechanged/reconnect.sh
echo "cd /var/flash" >> /var/flash/onlinechanged/reconnect.sh
echo "wget http://www.busybox.net/downloads/binaries/1.16.1/busybox-mipsel" >> /var/flash/onlinechanged/reconnect.sh
echo "chmod +x ./busybox-mipsel" >> /var/flash/onlinechanged/reconnect.sh
echo "cd /" >> /var/flash/onlinechanged/reconnect.sh
echo "fi" >> /var/flash/onlinechanged/reconnect.sh
echo "if [ \"\$(/var/flash/get_ip | /var/flash/busybox-mipsel cut -c 1-2)\" -eq 94 ]; then" >> /var/flash/onlinechanged/reconnect.sh
echo "echo \"richtiger IP-Bereich\"" >> /var/flash/onlinechanged/reconnect.sh
echo "echo \"\$(/var/flash/get_ip)\"" >> /var/flash/onlinechanged/reconnect.sh
echo "exit" >> /var/flash/onlinechanged/reconnect.sh
echo "fi" >> /var/flash/onlinechanged/reconnect.sh
echo "if [ \"\$(/var/flash/get_ip | /var/flash/busybox-mipsel cut -c 1-2)\" -eq 88 ]; then" >> /var/flash/onlinechanged/reconnect.sh
echo "dsld -s" >> /var/flash/onlinechanged/reconnect.sh
echo "dsld -n" >> /var/flash/onlinechanged/reconnect.sh
echo "fi" >> /var/flash/onlinechanged/reconnect.sh

echo "#!/bin/sh" > /var/flash/get_ip
echo "local ip=\"\"" >> /var/flash/get_ip
echo "ip=\$(/sbin/showdsldstat | grep \"0: ip\" | /var/flash/busybox-mipsel cut -d\/ -f1 | /var/flash/busybox-mipsel cut -d ' ' -f3)" >> /var/flash/get_ip
echo "echo \"\$ip\"" >> /var/flash/get_ip
echo "exit" >> /var/flash/get_ip

chmod +x /var/flash/onlinechanged/reconnect.sh
chmod +x /var/flash/get_ip
mount -o bind /var/flash/onlinechanged /etc/onlinechanged

dst=/var/tmp/signed_firmware
src=/usr/www/html/html/de/home
mkdir -pm 777 $dst
for file in home.js konfig.js; do
  if [ -f $src/$file ]; then
    sed -e 's,.*var signed =.*,var signed = "1",' $src/$file > $dst/$file
    mount -o bind $dst/$file $src/$file
  fi
done
### end of debug.cfg
 
Zuletzt bearbeitet:
Statt den ganzen echo´s am Anfang jeder Zeile und Anführungszeichen und Umleitungen kannst du auch vor das eigentliche Skript cat >> /var/flash/onlinechanged/reconnect.sh << EOF
und danach dann EOF schreiben. (Sorry, hatte ich vergessen ;))
 
Außerdem hast du nicht mein get_ip-Schnipsel genommen, der mit der AVM-BusyBox auskommt :´(

;-)
 
ok... ist geändert in:

PHP:
###
mkdir /var/flash/onlinechanged

cat > /var/flash/onlinechanged/reconnect.sh << "EOF"
#!/bin/sh
PATH=/var/flash:/bin:/usr/bin:/sbin:/usr/sbin
if [ -f /var/flash/busybox-mipsel ]; then
echo "richtige busybox vorhanden....."
else
cd /var/flash
wget http://www.busybox.net/downloads/binaries/1.16.1/busybox-mipsel
chmod +x ./busybox-mipsel
cd /
fi
if [ "$(get_ip | busybox-mipsel cut -c 1-2)" -eq 88 ]; then
/etc/init.d/rc.voip stop
dsld -s
dsld -n
/etc/init.d/rc.voip start
exit
else
ip_log
exit
fi
EOF

cat > /var/flash/get_ip << "EOF"
#!/bin/sh
PATH=/var/flash:/bin:/usr/bin:/sbin:/usr/sbin
local ip=""
ip=$(showdsldstat | grep "0: ip" | busybox-mipsel cut -d\/ -f1 | busybox-mipsel cut -d ' ' -f3)
echo "$ip"
exit
EOF

cat > /var/flash/ip_log << "EOF"
#!/bin/sh
PATH=/var/flash:/bin:/usr/bin:/sbin:/usr/sbin
dst=/var/media/ftp/Samsung-S1Mini-01
if [ -d $dst/FRITZ ]; then
echo "------------------------------------------------"  >> $dst/FRITZ/ip.log
date >> $dst/FRITZ/ip.log
get_ip >> $dst/FRITZ/ip.log
echo "------------------------------------------------" >> $dst/FRITZ/ip.log
fi
EOF

chmod +x /var/flash/ip_log
chmod +x /var/flash/onlinechanged/reconnect.sh
chmod +x /var/flash/get_ip
mount -o bind /var/flash/onlinechanged /etc/onlinechanged

dst=/var/tmp/signed_firmware
src=/usr/www/html/html/de/home
mkdir -pm 777 $dst
for file in home.js konfig.js; do
  if [ -f $src/$file ]; then
    sed -e 's,.*var signed =.*,var signed = "1",' $src/$file > $dst/$file
    mount -o bind $dst/$file $src/$file
  fi
done
### end of debug.cfg

Außerdem hast du nicht mein get_ip-Schnipsel genommen, der mit der AVM-BusyBox auskommt

... die andere Busybox brauch ich sowieso für ein paar andere Scripts..... :) ich
downloade sie auch in meinem Script von meinem Server statt der URL hier
im Code ( damit sie auch garantiert immer da ist ).....
 
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.