den Link zu einem tool gepostet, das das alles übernimmt und eine Reihe Modem/Router erkennt.
Quellcode |
|
1 |
echo 2>/dev/null "Teststring nach $workpath/$filename" > $workpath/$dummyfilename |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Shamaz« (28.12.2010, 13:00)
Sport ist gut, denn er hält (hier zumindest geistig) fit.Das ganze hier hat also einen eher sportlichen Charakter.
Der Weg über's WebUI ist bei der geforderten Kompatibilität natürlich nicht nutzbar, da die alle verschieden sind. Dennoch auch hierzu ein Tipp: Ich habe mir dafür am Router einen weiteren, wenig privilegierten User angelegt, der lediglich die Verbindungsdaten abfragen kann. Mit diesem Usernamen bekommt mein ddclient seine benötigten Informationen heraus.Problem daran wird wohl sein, die Passwortabfrage sicher zu gestalten.
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
#!/bin/bash ######################################################################### # Autor: Shamaz # # Datum: 06.01.2011 # # Version: 2.2 # # Beschreibung: Script für Bash um über Linux Standartprogramme # # die externe IP eines Routers heraus zu bekommen # # und in Abhaengigkeit dessen einen Dienst(eng.: Deamon) # # neu zu starten, sollte sich diese im Vergleich zum # # Vorherigenmale geaendert haben. # # # # Verwendete Programme: Ping, echo, test, date, head, sed # ######################################################################### ########################################## # Variablendeklaration + Initialisierung # ########################################## workpath="/tmp" filename="<Dateiname fuer alte IP>" logfilename="<Dateiname fuer Log>" deamonpath="<Pfad zum Deamon(default: /etc/ini.d)>" # WICHTIG: OHNE Slash am Ende deamonname="<Dienstname>" dynamicdns="<Dynamic DNS>" dummyfilename="dummy" writeable=0 defaultip="0.0.0.0" external_router_ip_current="" external_router_ip_old="" ############################################################ # Test ob schreiben nach /$workpath/$filename moeglich ist # ############################################################ timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: Teste Schreibrechte auf $workpath/" echo 2>/dev/null "Teststring nach $workpath/$filename" > $workpath/$dummyfilename ######################################################################### # Wenn Schreiben moeglich war, dann globale Variable fuer Exitcode $?=0 # ######################################################################### if test $? -eq 0 ############################### # Setzen des Flags $writeable # ############################### then writeable=1 else writeable=0 fi ######################################################################## # Wenn Schreiben moeglich ist wird Skript weiter ausgefuehrt # # wenn nicht, wird das Skript beendet. # # Begruendung: # # Kann man die AlteIP nicht speichern, so wuerde jedesmal der # # Test auf Gleichheit/Ungleichheit zu Gunsten der NeuenIP gehen, # # was staendig den Dienst neu starten wuerde. Das waere aber schlecht. # ######################################################################## if test "$writeable" -eq 1 then timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: Erstellen Dummydatei erfolgreich" echo "$timestamp INFORMATION: Erstellen Dummydatei erfolgreich" >> $workpath/$logfilename timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: loesche Dummydatei wieder" echo "$timestamp INFORMATION: loesche Dummydatei wieder" >> $workpath/$logfilename rm $workpath/$dummyfilename ####################################################### # Test ob Datei mit AlterIP nicht existiert. # # Negative Abfrage, weil nur der Fall interessant ist.# # Sollte die Datei nicht existieren, dann wird eine # # mit der $defaultip erstellt # ####################################################### if test ! -f $workpath/$filename then timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp ERROR: Datei $workpath/$filename existiert nicht" echo "$timestamp ERROR: Datei $workpath/$filename existiert nicht" >> $workpath/$logfilename timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: Erstelle $workpath/$filename mit default IP: <$defaultip>" echo "$timestamp INFORMATION: Erstelle $workpath/$filename mit default IP: <$defaultip>" >> $workpath/$filename echo "$defaultip" > $workpath/$filename fi ############################# # Auslesen des Dateiinhalts # ############################# external_router_ip_old=$(head -n1 "$workpath/$filename"); timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: AlteIP ist: $external_router_ip_old" echo "$timestamp INFORMATION: AlteIP ist: $external_router_ip_old" >> $workpath/$logfilename ############################################################### # Ermittelt via ping, head und sed die Externe IP des Routers # ############################################################### external_router_ip_current=$(ping -n -c1 $dynamicdns 2>/dev/null | head -n1 | sed -E 's/.*\(([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\).*/\1/g') ##################################################################### # Wenn Ping erfolgreich dann kann weiter gemacht werden, # # wenn nicht ist ein Fehler aufgetreten und das Skript wird beendet # ##################################################################### if test -n "$external_router_ip_current" then timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: Ping war erfolgreich, NeueIP ist: $external_router_ip_current" echo "$timestamp INFORMATION: Ping war erfolgreich, NeueIP ist: $external_router_ip_current" >> $workpath/$logfilename ################################## # Eigentlicher Vergleich der IPs # ################################## if test "$external_router_ip_old" != "$external_router_ip_current"; then timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: AlteIP <$external_router_ip_old> ist ungleich NeueIP <$external_router_ip_current>" echo "$timestamp INFORMATION: AlteIP <$external_router_ip_old> ist ungleich NeueIP <$external_router_ip_current>" >> $workpath/$logfilename echo $external_router_ip_current > $workpath/$filename timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: Schreibe <$external_router_ip_current> nach $workpath/$filename" echo "$timestamp INFORMATION: Schreibe <$external_router_ip_current> nach $workpath/$filename" >> $workpath/$logfilename timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: Starte $deamonname neu" ##################################### # Neustart des $deamonname Dienstes # ##################################### $deamonpath/$deamonname restart #################################### # Test ob Neustart erfolgreich war # #################################### if test $? -eq 0 then timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: $deamonname Restart erfolgreich" echo "$timestamp INFORMATION: $deamonname Restart erfolgreich" >> $workpath/$logfilename echo "$timestamp INFORMATION: Skript Ende" >> $workpath/$logfilename echo echo "Skript Ende" echo else timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp ERROR: $deamonname Restart war NICHT erfolgreich!!!" echo "$timestamp ERROR: $deamonname Restart war NICHT erfolgreich!!!" >> $workpath/$logfilename echo "$timestamp INFORMATION: Skript Ende" >> $workpath/$logfilename echo echo "Skript Ende" echo fi else timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp INFORMATION: AlteIP <$external_router_ip_old> ist gleich NeueIP <$external_router_ip_current>, $deamonname wird NICHT neu gestartet" echo "$timestamp INFORMATION: AlteIP <$external_router_ip_old> ist gleich NeueIP <$external_router_ip_current>, $deamonname wird NICHT neu gestartet" >> $workpath/$logfilename echo "$timestamp INFORMATION: Skript Ende" >> $workpath/$logfilename echo echo "Skript Ende" echo fi else timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp WARNING: Ping war nicht erfolgreich, $deamonname wird nicht neu gestartet" echo "$timestamp WARNING: Ping war nicht erfolgreich, $deamonname wird nicht neu gestartet" >> $workpath/$logfilename echo "$timestamp INFORMATION: Skript Ende" >> $workpath/$logfilename echo echo "Skript Ende" echo fi else timestamp=$(date +'%d.%m.%Y %H:%M:%S') echo "$timestamp ERROR: Keine Schreibrechte auf <$workpath/...>" echo echo "Skript Ende" echo fi |
Quellcode |
|
1 2 3 4 |
Restarting Common Unix Printing System: cupsdstart-stop-daemon: warning: failed to kill 4421: Operation not permitted cupsd: Child exited with status 1! failed! 06.01.2011 23:55:16 INFORMATION: cups Restart erfolgreich |
Quellcode |
|
1 |
external_router_ip_current=$(ping -n -c1 $dynamicdns 2>/dev/null | head -n1 | sed 's/).*//; s/.*(//') |
Benutzerinformationen überspringen
User
Registrierungsdatum: 01.09.2005
Derivat: Ubuntu
Architektur: 64-Bit PC
Desktop: Unity
Andere Betriebssysteme: neben Ubuntu beruflich Solaris sowie (leider) auch SLES 9-11
Quellcode |
|
1 2 3 |
external_router_ip_current=$(host $dynamicdns | awk ' $3~/address/ { print $NF }') external_router_ip_current=$(nslookup $dynamicdns | awk ' $1 ~ /Address/ && $NF !~ /#53/ { print $NF }') external_router_ip_current=$(getent hosts $dynamicdns | awk '{ print $1 }') |
Quellcode |
|
1 |
echo "<Text>" | tee -a $workpath/$logfilename |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tronic69« (07.01.2011, 12:39)
1 Besucher
Sponsorenwerbung: |
Hardware, Computer, PCs, Notebooks & Laptops mit Linux |
Forensoftware: Burning Board®, entwickelt von WoltLab® GmbH
Individuelle Notebooks Laptops - Individuelle Computer PCs - Linux Notebooks & Computers
Lastminute - Ubuntu Linux - Abmahnung - Geek und Nerd Shirt Shop
T-Shirts - sanierung wien