Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Informationen aus dem Webinterface einer Fritz!Box via Shellscript auslesen

Anleitung Netzwerke Router & Routing

Mitglied: colinardo

colinardo (Level 5) - Jetzt verbinden

18.08.2013, aktualisiert 27.04.2016, 21253 Aufrufe, 23 Kommentare, 13 Danke

Für alle die die Daten aus dem Webinterface einer Fritz!Box via Shellscript auslesen müssen / wollen. Die Scripte wurden mit einer Fritz!Box 7390 mit Fritz!OS 6.03 getestet. Da sich aber viele Modelle von AVM im Webinterface gleichen, sollten die Scripte auch auf anderen Modellen der Fritz!Box-Serie funktionieren.

Steht man vor der Aufgabe bestimmte Informationen der Fritz!Box automatisiert abzufragen, hilft euch vielleicht dieses Script weiter.
Das Script kennt folgende Variablen:
_BOXURL = Adresse der Fritzbox
_USERNAME = Benutzername (wenn keiner zum Login verwendet wird, diesem einen leeren String zuweisen)
_PASSWORD = Passwort des Webinterface
_REQUESTPAGE = Die angeforderte Unterseite der Fritz!Box (mit beginnendem slash "/")
_OUTPUTFILE = Dateinamen in dem die HTML-Seite gespeichert werden soll

Shell-Script

(getestet mit einer Fritz!Box 7390 mit FRITZ!OS 6.03, sollte aber auch mit anderen Modellen von AVM funktionieren)
01.
#!/bin/bash 
02.
_BOXURL="http://fritz.box" 
03.
_USERNAME="" 
04.
_PASSWORD="GEHEIM" 
05.
_REQUESTPAGE="/fon_num/foncalls_list.lua" 
06.
_OUTPUTFILE="OUTPUT.HTML" 
07.
_CHALLENGE=$(curl -s ${_BOXURL}/login.lua | grep "^g_challenge" | awk -F '"' '{ print $2 }') 
08.
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') 
09.
_RESPONSE="${_CHALLENGE}-${_MD5}" 
10.
_SID=$(curl -i -s -k -d 'response='${_RESPONSE} -d 'page=' -d "username=${_USERNAME}" "${_BOXURL}/login.lua" | grep "Location:" | grep -Poi 'sid=[a-f\d]+' | cut -d '=' -f2) 
11.
curl -s "${_BOXURL}${_REQUESTPAGE}" -d "sid=${_SID}" >$_OUTPUTFILE
Um an den Pfad zur entsprechenden Unterseite heran zu kommen, kann man z.B. die in Firefox integrierte Web-Konsole(STRG+SHIFT+K) oder das Plugin Firebug nutzen.
Der Inhalt der entsprechenden Fritz!Box-Seite wird nun in einer HTML-Datei gespeichert.
Diese lässt sich dann entweder weiter mit AWK,GREP etc. auf der Kommandozeile verarbeiten, oder man extrahiert die Daten z.B. mit einem PHP--Script.

Beispiele

Script 1: Ausfiltern des Inhalts eines HTML-Tags mit GREP auf der Kommandzeile
cat OUTPUT.html | tr -d '\n' | grep -oP '(?<=<table id="test">).*?(?=</table>)'
Im Beispiel wird alles zwischen diesen Tags ausgelesen: <table id="test"> ... </table> und auf der Kommandozeile ausgegeben. Zur weiteren Verarbeitung der HTML-Datei empfehle ich das Shell Utility awk bzw. gawk da dieses sehr mächtige String-Verarbeitung ermöglicht. Einarbeitung ist hier aber vorher Pflicht wenn man sich damit noch nicht auskennt.

Beispiel 2: Informationen zur DSL-Qualität der Fritz!Box via Shell auslesen (nur für Firmware kleiner als 6.0 / für > 6.0 siehe Hinweis weiter unten)
01.
#!/bin/bash 
02.
_BOXURL="http://fritz.box" 
03.
_USERNAME="" 
04.
_PASSWORD="GEHEIM" 
05.
_CHALLENGE=$(curl -s ${_BOXURL}/login.lua | grep "^g_challenge" | awk -F '"' '{ print $2 }') 
06.
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') 
07.
_RESPONSE="${_CHALLENGE}-${_MD5}" 
08.
_SID=$(curl -i -s -k -d 'response='${_RESPONSE} -d 'page=' -d "username=${_USERNAME}" "${_BOXURL}/login.lua" | grep "Location:" | grep -Poi 'sid=[a-f\d]+' | cut -d '=' -f2) 
09.
 
10.
#DSL-Informationen zur Leitungsqualität 
11.
_PAGE_DSL_STATS=$(curl -s ${_BOXURL}/internet/dsl_stats_tab.lua -d 'sid='${_SID}) 
12.
_DATARATE_IN=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/\[\"sar:status\/dsl_ds_rate\"\] = \"(.*)\"/,arr){print arr[1]};') 
13.
_DATARATE_OUT=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/\[\"sar:status\/dsl_us_rate\"\] = \"(.*)\"/,arr){print arr[1]};') 
14.
_LATENZ_IN=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/\[\"sar:status\/ds_delay\"\] = \"(.*)\"/,arr){print arr[1]};') 
15.
_LATENZ_OUT=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/\[\"sar:status\/us_delay\"\] = \"(.*)\"/,arr){print arr[1]};') 
16.
_NOISEMARGIN_IN=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/\[\"sar:status\/ds_margin\"\] = \"(.*)\"/,arr){print arr[1]};') 
17.
_NOISEMARGIN_OUT=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/\[\"sar:status\/us_margin\"\] = \"(.*)\"/,arr){print arr[1]};') 
18.
_DSLLINELOSS_IN=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/\[\"sar:status\/ds_attenuation\"\] = \"(.*)\"/,arr){print arr[1]};') 
19.
_DSLLINELOSS_OUT=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/\[\"sar:status\/us_attenuation\"\] = \"(.*)\"/,arr){print arr[1]};') 
20.
 
21.
#Resyncs der letzten 24h auslesen 
22.
_PAGE_STATS_GRAPH=$(curl -s "${_BOXURL}/internet/dsl_stats_graph.lua" -d 'sid='${_SID}) 
23.
_RESYNCS=$(echo "$_PAGE_STATS_GRAPH" | awk  'BEGIN {summe = 0}; match($0, /\[\"sar:status\/StatResync\"\] = \"(.*)\"/, arr){for(i = 1; i <= split(arr[1],splitted,",");i++){summe += int(splitted[i])}};END {print summe};') 
24.
 
25.
echo "Datenrate IN:             $_DATARATE_IN kbit/s" 
26.
echo "Datenrate OUT:            $_DATARATE_OUT kbit/s" 
27.
echo "Latenz Empfangsrichtung:  $_LATENZ_IN ms" 
28.
echo "Latenz Senderichtung:     $_LATENZ_OUT ms" 
29.
echo "Störabstandsmarge IN:     $_NOISEMARGIN_IN db" 
30.
echo "Störabstandsmarge OUT:    $_NOISEMARGIN_OUT db" 
31.
echo "Leitungsdämpfung IN:      $_DSLLINELOSS_IN db" 
32.
echo "Leitungsdämpfung OUT:     $_DSLLINELOSS_OUT db" 
33.
echo "DSL-Resync's (in 24h):    $_RESYNCS mal"
Wenn eine Fritz!Box mit OS >= 6.0 eingesetzt wird muss in obigem Script Zeile 10-19 durch diesen Block ersetzt werden: (Achtung: nur getestet mit Firmware 6.03)
01.
#DSL-Informationen zur Leitungsqualität 
02.
_PAGE_DSL_STATS=$(curl -s ${_BOXURL}/internet/dsl_stats_tab.lua -d 'sid='${_SID}) 
03.
_DATARATE_IN=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/Aktuelle Datenrate.*"c3">([0-9]+)<\/td>.*Nahtlose Ratenadaption/,arr){print arr[1]};') 
04.
_DATARATE_OUT=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/Aktuelle Datenrate.*"c4">([0-9]+)<\/td>.*Nahtlose Ratenadaption/,arr){print arr[1]};') 
05.
_LATENZ_IN=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/Latenz.*"c3">([0-9]+) ms<\/td>/,arr){print arr[1]};') 
06.
_LATENZ_OUT=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/Latenz.*"c4">([0-9]+) ms<\/td>/,arr){print arr[1]};') 
07.
_NOISEMARGIN_IN=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/Störabstandsmarge.*"c3">([0-9]+)<\/td>.*Trägertausch/,arr){print arr[1]};') 
08.
_NOISEMARGIN_OUT=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/Störabstandsmarge.*"c4">([0-9]+)<\/td>.*Trägertausch/,arr){print arr[1]};') 
09.
_DSLLINELOSS_IN=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/Leitungsdämpfung.*"c3">([0-9]+)<\/td>.*Leistungsreduzierung/,arr){print arr[1]};') 
10.
_DSLLINELOSS_OUT=$(echo "${_PAGE_DSL_STATS}" | awk 'match($0,/Leitungsdämpfung.*"c4">([0-9]+)<\/td>.*Leistungsreduzierung/,arr){print arr[1]};')
Script 3: Syslog der Fritz!Box auslesen
01.
#!/bin/bash 
02.
_BOXURL="http://fritz.box" 
03.
_USERNAME="" 
04.
_PASSWORD="GEHEIM" 
05.
_CHALLENGE=$(curl -s ${_BOXURL}/login.lua | grep "^g_challenge" | awk -F '"' '{ print $2 }') 
06.
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') 
07.
_RESPONSE="${_CHALLENGE}-${_MD5}" 
08.
_SID=$(curl -i -s -k -d 'response='${_RESPONSE} -d 'page=' -d "username=${_USERNAME}" "${_BOXURL}/login.lua" | grep "Location:" | grep -Poi 'sid=[a-f\d]+' | cut -d '=' -f2) 
09.
 
10.
#Syslog auslesen 
11.
_PAGE_SYSLOG=$(curl -s "${_BOXURL}/system/syslog.lua" -d 'tab=aus' -d 'sid='${_SID}) 
12.
_RAW_LOGS=$(echo "$_PAGE_SYSLOG" | tail -n $(expr $(echo "$_PAGE_SYSLOG" | wc -l) - $(echo "$_PAGE_SYSLOG" | grep -n '<code>' | grep -oP '^\d+')) | head -n -5) 
13.
_SYSLOG=$(echo "$_RAW_LOGS" | awk 'match($0, /\[1\] = \"(.*)\"\,/, arr){line = arr[1]};match($0, /\[2\] = \"(.*)\"\,/, arr){line = line"\t"arr[1]};match($0, /\[3\] = \"(.*)\"\,/, arr){print line"\t"arr[1];line = ""};') 
14.
echo "$_SYSLOG"
Script 4: Portfreigaben der Fritz!Box auslesen
01.
#!/bin/bash 
02.
_BOXURL="http://fritz.box" 
03.
_USERNAME="" 
04.
_PASSWORD="GEHEIM" 
05.
_CHALLENGE=$(curl -s ${_BOXURL}/login.lua | grep "^g_challenge" | awk -F '"' '{ print $2 }') 
06.
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') 
07.
_RESPONSE="${_CHALLENGE}-${_MD5}" 
08.
_SID=$(curl -i -s -k -d 'response='${_RESPONSE} -d 'page=' -d "username=${_USERNAME}" "${_BOXURL}/login.lua" | grep "Location:" | grep -Poi 'sid=[a-f\d]+' | cut -d '=' -f2) 
09.
 
10.
#Portforwardings auslesen 
11.
_PAGE_PFW=$(curl -s "${_BOXURL}/internet/port_fw.lua" -d 'sid='${_SID}) 
12.
_RULES=$(echo "$_PAGE_PFW" | awk  'match($0, /\[\"_node\"\] = \"(.*)\"/, arr){line = arr[1]};match($0, /\[\"activated\"\] = \"(.*)\"/, arr){if(arr[1] == 1){line = line"#Ja"}else{line = line"#Nein"}};match($0, /\[\"description\"\] = \"(.*)\"/, arr){line = line"#"arr[1]};match($0, /\[\"endport\"\] = \"(.*)\"/, arr){line = line"#"arr[1]};match($0, /\[\"fwip\"\] = \"(.*)\"/, arr){line = line"#"arr[1]};match($0, /\[\"fwport\"\] = \"(.*)\"/, arr){line = line"#"arr[1]};match($0, /\[\"port\"\] = \"(.*)\"/, arr){line = line"#"arr[1]};match($0, /\[\"protocol\"\] = \"(.*)\"/, arr){line = line"#"arr[1]; print line; line =""};') 
13.
 
14.
echo -e "--------------------------------\nPortforwardings der Fritz!Box:\n--------------------------------" 
15.
echo -e "Regel#Aktiv#Beschreibung#Port Extern(Max)#IP-Intern#Port Intern#Port Extern(MIN)#Protokoll\n$_RULES" | column -t -s "#"
Script 5: Fritz!Box neu starten (Reboot)
01.
#!/bin/bash 
02.
_BOXURL="http://fritz.box" 
03.
_USERNAME="" 
04.
_PASSWORD="GEHEIM" 
05.
_CHALLENGE=$(curl -s ${_BOXURL}/login.lua | grep "^g_challenge" | awk -F '"' '{ print $2 }') 
06.
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') 
07.
_RESPONSE="${_CHALLENGE}-${_MD5}" 
08.
_SID=$(curl -i -s -k -d 'response='${_RESPONSE} -d 'page=' -d "username=${_USERNAME}" "${_BOXURL}/login.lua" | grep "Location:" | grep -Poi 'sid=[a-f\d]+' | cut -d '=' -f2) 
09.
 
10.
# Box rebooten 
11.
echo 'Reboot in progress ... please allow up to 2 minutes for the box to come up!' 
12.
curl -s "${_BOXURL}/reboot.lua?sid=${_SID}&extern_reboot=1&ajax=1" >/dev/null
Script 6: Extrahieren von bestimmten Tags mit PHP (Kommentare im Code)
01.
//shell-script ausführen 
02.
exec("/path/queryfritzbox.sh"); 
03.
//HTML-Dokument als DOM einlesen 
04.
$filePath = "test.html"
05.
$dom = new DOMDocument(); 
06.
$dom->loadHTMLFile($filePath); 
07.
if ($dom){ 
08.
	$xpath = new DOMXPath($dom); 
09.
	// Beispiel : Alle <div>-Tags mit der Klasse "test" mit XPath auslesen und ausgeben 
10.
	$tags = $xpath->query('//div[@class="test"]'); 
11.
	foreach ($tags as $tag) { 
12.
		echo(trim($tag->nodeValue) . '<br />'); 
13.
14.
} else
15.
	echo "Konnte HTML-Datei nicht einlesen"
16.
}
Aktuelle Login-Methode für Boxen mit aktuellen 6.5er Firmware-Versionen
Da sich in den 6.5er Versionen das Interface etwas verändert hat hier ein Login-Update für diese Versionen
01.
#!/bin/bash 
02.
_BOXURL="http://fritz.box" 
03.
_USERNAME="" 
04.
_PASSWORD="GEHEIM" 
05.
_CHALLENGE=$(curl -s "${_BOXURL}/login_sid.lua?username=${_USERNAME}" | grep -Po '(?<=<Challenge>).*(?=</Challenge>)') 
06.
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') 
07.
_RESPONSE="${_CHALLENGE}-${_MD5}" 
08.
_SID=$(curl -i -s -k -d "response=${_RESPONSE}&username=${_USERNAME}" "${_BOXURL}" | grep -Po -m 1 '(?<=sid=)[a-f\d]+')
Weitere Lösungen für die unterschiedlichen Seiten der Fritz!Box werden folgen ...

Grüße @colinardo
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Überarbeitungen
Datum Änderung
27.04.2016 Login-Methode für Firmware-Version 6.5X hinzugefügt
16.06.2015 Script zum Reboot der Box hinzugefügt
17.07.2014 Änderungen für Firmware 6.0X hinzugefügt
28.07.2013 Script zum Auslesen der Protfreigaben hinzugefügt
27.08.2013 Zu Beispiel 2: Information zur DSL-Resync-Anzahl in den letzten 24h hinzugefügt
27.08.2013 Script zum Auslesen des Syslog der Fritz!Box via Shell hinzugefügt.
Mitglied: aqui
26.08.2013, aktualisiert 31.08.2013
Klasse Anleitung !
Lässt sich sicher auch für andere WebGUI basierte Router anwenden, oder ?

Link ist im Raspberry_Mgmt-Server_Tutorial eingepflegt
Bitte warten ..
Mitglied: colinardo
26.08.2013 um 11:05 Uhr
Zitat von aqui:
Klasse Anleitung !
Lässt sich sicher auch für andere WebGUI basierte Router anwenden, oder ?
Hi @aqui,
klar, man muss das Script halt an die Login-Methode des jeweiligen Herstellers anpassen. Dazu gibt es bereits einige Listen für Router im Web wie das mit curl auszusehen hat. Die Vorgehensweise nach dem Login ist ja die eigentliche Arbeit - mit Bash eine richtige Fusselsarbeit, da hat PHP in dieser Hinsicht schon seine Vorzüge, oder kennst du zufällig ein Tool für die Linux Kommandozeile mit dem sich ein HTML-DOM bequemer parsen lässt?

Grüße Uwe
Bitte warten ..
Mitglied: aqui
26.08.2013 um 11:20 Uhr
Als alter CLI Knecht (mit Rancid usw.) nicht wirklich...
Bitte warten ..
Mitglied: DRwindows97
26.08.2013 um 14:52 Uhr
Funktioniert das obige Skript auch unter Fritzboxen der 7360er Reihe ?
Bitte warten ..
Mitglied: colinardo
26.08.2013, aktualisiert um 14:56 Uhr
Zitat von DRwindows97:
Funktioniert das obige Skript auch unter Fritzboxen der 7360er Reihe ?
ausprobieren ! Hab hier keine Schublade mit allen Fritzboxen parat.
Kaputt machen kannst du damit nichts.
Grüße Uwe
Bitte warten ..
Mitglied: DRwindows97
26.08.2013 um 14:58 Uhr
Ok, ich werdes mal probieren.
Bitte warten ..
Mitglied: colinardo
28.08.2013 um 14:12 Uhr
--- Update ---:
Habe noch zwei Scripte zum Auslesen des Syslog und der Portfreigaben hinzugefügt
Uwe
Bitte warten ..
Mitglied: panguu
28.09.2014, aktualisiert um 15:20 Uhr
Hi,

danke für die scripts. Ich wollte feedback hierzu geben, da ich das gerade ausprobieren wollte.

Im Ursprungsscript gibt's wohl 'nen Tippfehler, der zu einer Fehlermeldung führt. Das taucht in der letzten Zeile (11) auf, der redirect der Ausgabe sollte auf >$_OUTPUTFILE gehen, da fehlt bei dir noch ein 'T'

Dann wollte ich das zweite Skript ausprobieren, um DSL-Leitungsqualität auszulesen, jedoch schlägt das ebenso fehl (ich habe das Skript natürlich angepasst, weil ich >=OS6.x verwende). Wenn ich das Skript aufrufe erhalte ich:

awk: line 1: syntax error at or near ,
awk: line 1: syntax error at or near ,
awk: line 1: syntax error at or near ,
awk: line 1: syntax error at or near ,
awk: line 1: syntax error at or near ,
awk: line 1: syntax error at or near ,
awk: line 1: syntax error at or near ,
awk: line 1: syntax error at or near ,
awk: line 1: syntax error at or near ,
Datenrate IN: kbit/s
Datenrate OUT: kbit/s
Latenz Empfangsrichtung: ms
Latenz Senderichtung: ms
Störabstandsmarge IN: db
Störabstandsmarge OUT: db
Leitungsdämpfung IN: db
Leitungsdämpfung OUT: db
DSL-Resync's (in 24h): mal

Grüße,
Pangu
Bitte warten ..
Mitglied: colinardo
28.09.2014, aktualisiert um 15:39 Uhr
Hallo Pangu,
Zitat von panguu:
Im Ursprungsscript gibt's wohl 'nen Tippfehler, der zu einer Fehlermeldung führt. Das taucht in der letzten Zeile
(11) auf, der redirect der Ausgabe sollte auf >$_OUTPUTFILE gehen, da fehlt bei dir noch ein 'T'
danke für die Rückmeldung ... ist oben korrigiert !
Dann wollte ich das zweite Skript ausprobieren, um DSL-Leitungsqualität auszulesen, jedoch schlägt das ebenso fehl (ich
habe das Skript natürlich angepasst, weil ich >=OS6.x verwende). Wenn ich das Skript aufrufe erhalte ich:
kann ich hier nicht bestätigen, ich habe es aber auch nur mit einer Fritz!Box 7390 mit Firmware 6.03 getestet, wie es mit der aktuellen 6.20 aussieht kann ich im Moment noch nicht sagen. Da kann sich immer mal was im Quellcode ändern, werde das bei Zeiten nachholen.

Ansonsten könnte es bei dir eher an der verwendeten awk-Version liegen, oder ein Zeichensatzfehler beim kopieren.

Grüße Uwe
Bitte warten ..
Mitglied: aqui
29.09.2014 um 08:57 Uhr
Mit apt-get install gawk auf einem RasPi funktioniert es wunderbar
Bitte warten ..
Mitglied: panguu
29.09.2014 um 09:50 Uhr
ich hatte "mawk" auf meinem RPi installiert, und damit ging's nicht. Müsste man evtl. den syntax anpassen, aber hab jetzt nicht groß danach geschaut. Mit dem angesprochenen "gawk" spuckt er schonmal keine Fehlermeldung aus, das klappt also. Allerdings krieg ich keine Werte zurückgeliefert, aber das kann wiederum daran liegen, dass das Script mit meiner FritzBox 6340 Cable nicht will, oder meine Firmware einfach ein klein wenig anders ist und das Script hierzu nicht passt.
Bitte warten ..
Mitglied: colinardo
29.09.2014, aktualisiert um 10:04 Uhr
Zitat von panguu:
ich hatte "mawk" auf meinem RPi installiert, und damit ging's nicht. Müsste man evtl. den syntax anpassen,
aber hab jetzt nicht groß danach geschaut. Mit dem angesprochenen "gawk" spuckt er schonmal keine Fehlermeldung
aus, das klappt also. Allerdings krieg ich keine Werte zurückgeliefert, aber das kann wiederum daran liegen, dass das Script
mit meiner FritzBox 6340 Cable nicht will, oder meine Firmware einfach ein klein wenig anders ist und das Script hierzu nicht
passt.
yip das wird's sein musst du den HTML-Quellcode studieren, und dich ein bißchen in gawk einlesen
Bitte warten ..
Mitglied: TimoMF
15.06.2015 um 13:25 Uhr
Das erste Script funktioniert auch auf der Fritz!BOX 7490 schon mal danke dafür.

Ich bin ansich auf der Suche nach einem Script welches die Fritzbox neu zu starten. Den über Telnet möchte ich das nicht machen, da die Box dem Provider gehört.

Leider bekomme ich das nicht hin.

im Quellcode finde ich da leider nichts was

<p>Klicken Sie hier, wenn Sie die FRITZ!Box neu starten wollen.</p>
<h4>Hinweis:</h4>
<p>Beim Neustart werden die Ereignismeldungen gelöscht. Alle Einstellungen der FRITZ!Box bleiben erhalten.</p>
<form action="/system/reboot.lua" method="POST">
<div id="btn_form_foot">
<input type="hidden" name="sid" value="577250e1160a0143">
<button type="submit" name="reboot">Neu starten</button>
</div>
</form>
Nachdem was ich da sehe müste die curl zeile doch so aussehen oder?

curl -s "${_BOXURL}${_REQUESTPAGE}" -d "sid=${_SID}" -d "reboot=Neu%20starten" >$_OUTPUTFILE

leider gibt die Fritz!box dann nichts zurück die output.html beibt leer.
Was mache ich da falsch?
Bitte warten ..
Mitglied: colinardo
15.06.2015, aktualisiert um 14:04 Uhr
Hallo erstmal @TimoMF und willkommen auf Administrator.de!
Das geht deshalb nicht weil der Reboot mit der Unterstützung von JavaScript und Ajax initiiert wird, bzw mit JavaScript eine xhr-id generiert wird mit welcher dann ein weiterer GET-Request an die Seite gesendet wird.
Muss ich mir mal die JavaScripts ansehen ob sich da was machen lässt.

Grüße Uwe
Bitte warten ..
Mitglied: TimoMF
16.06.2015 um 18:43 Uhr
Das wäre sehr nett von dir.

Dann drücke ich mal die Daumen das es Klappt.
Bitte warten ..
Mitglied: colinardo
16.06.2015, aktualisiert um 20:08 Uhr
Kaum hat man mal die LUA-Scripte via Telnet auf der Box studiert, schon fällt einem die Lösung in die Hände , hätte ich auch gleich drauf kommen können , oh man.
Es reicht ein einfacher GET mit Curl und den richtigen Parametern...
Reboot Fritz!Box (getestet mit einer 7390 und Firmware 6.23)
(Bitte beachte das der obige Code auch etwas angepasst wurde, da unsichtbare Zeichen in der SID Probleme gemacht haben)
01.
#!/bin/bash 
02.
_BOXURL="http://fritz.box" 
03.
_USERNAME="" 
04.
_PASSWORD="GEHEIM" 
05.
_CHALLENGE=$(curl -s ${_BOXURL}/login.lua | grep "^g_challenge" | awk -F '"' '{ print $2 }') 
06.
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') 
07.
_RESPONSE=${_CHALLENGE}"-"${_MD5} 
08.
_SID=$(curl -i -s -k -d 'response='${_RESPONSE} -d 'page=' -d "username=${_USERNAME}" "${_BOXURL}/login.lua" | grep "Location:" | awk -F'=' '{print $NF}' | grep -Po '[a-f\d]+') 
09.
 
10.
# Box rebooten 
11.
echo 'Reboot in progress ... please allow up to 2 minutes for the box to come up!' 
12.
curl -s "${_BOXURL}/reboot.lua?sid=${_SID}&extern_reboot=1&ajax=1" >/dev/null
p.s. und ja, der Pfad /reboot.lua ist korrrekt, denn es gibt zwei dieser Scripte, einmal im root und einmal unter /system.

Nun viel Spaß beim rebooten
Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Bitte warten ..
Mitglied: TimoMF
16.06.2015, aktualisiert um 22:15 Uhr
Vielen Dank dir.

Mei der Fritz!BOX 7490 Firmware 6.20. Die Firmware ist die Aktuelle vom Provider freigegebene Version.

Ich Poste auch noch im anderem Post damit auch die jenigen die nach der 7490 suchen es finden.
Fals es lieber in den Haubtpost soll dort soll dann bitte meinen Post löschen.

Griß Timo
Bitte warten ..
Mitglied: aqui
17.06.2015 um 09:57 Uhr
http://www.administrator.de/faq/32
dann nicht vergessen....
Bitte warten ..
Mitglied: colinardo
17.06.2015, aktualisiert um 10:43 Uhr
Zitat von aqui:
http://www.administrator.de/faq/32
dann nicht vergessen....
Hallo @aqui, wenn ich das nur könnte, aber das ist eine Anleitung

Grüße Uwe
Bitte warten ..
Mitglied: LloidIrvyng
13.12.2015 um 21:28 Uhr
Hi Uwe,

vielen Dank für die Veröffentlichung. In diesem Zuge gibt als Dankeschön auch gleich etwas zurück. Mit dem unten angehängten Skript ist es möglich, einen Computer via Wake-on-LAN aufzuwecken. Bei der Fritz!Box gibt es da den bekannten Button "Computer starten". Mein Grund ist folgender: Ich greife ab und zu auf meinen Router aus der Ferne zu und muss einen Rechner, welcher in dem Netz hängt, aufwecken. Bei meiner Fritz!Box (Fritz!Box 6320) ist es jedoch nicht ohne weiteres möglich, das Magic Packet über einen freigegeben Port zu broadcasten. Falls man natürlich schon direkt am Netzwerk hängt, bringt das Skript natürlich keinen wirklichen Mehrwert - da ist beispielsweise etherwake unter Linux bequemer.

Ich habe das Ganze unter Windows 10 und Debian 9 getestet. Sollte es nicht funktionieren, so sollte zuerst überprüft werden, ob der Rechner auch korrekt konfiguriert wurde und im Netzwerk via LAN verbunden ist. Je nach Einsatzgebiet könnte man das Skript natürlich noch erweitern.

Beste Grüße: Lloid Irvyng


01.
#!/bin/bash 
02.
 
03.
_BOXURL="192.168.178.1" 
04.
_USERNAME="" 
05.
_PASSWORD="MEIN-PASSWORT" 
06.
_MAC="FF:FF:FF:FF:FF:FF" 
07.
_CHALLENGE=$(curl -s ${_BOXURL}/login.lua | grep "^g_challenge" | awk -F '"' '{ print $2 }') 
08.
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') 
09.
_RESPONSE="${_CHALLENGE}-${_MD5}" 
10.
_SID=$(curl -i -s -k -d 'response='${_RESPONSE} -d 'page=' -d 'username='${_USERNAME} ${_BOXURL}/login.lua | grep "Location:" | awk -F'=' '{print $NF}' | grep -Po '[a-f\d]+') 
11.
 
12.
_PAGE_NETWORK_LIST=$(curl -s "${_BOXURL}/net/network_user_devices.lua" -d 'sid='${_SID}) 
13.
_RULES=$(echo "$_PAGE_NETWORK_LIST" | awk  'match($0, /\[\"UID\"\] = \"(.*)\"/, arr){line = arr[1]};match($0, /\[\"_node\"\] = \"(.*)\"/, arr){line = line"#"arr[1]};match($0, /\[\"ip\"\] = \"(.*)\"/, arr){line = line"#"arr[1]};match($0, /\[\"mac\"\] = \"(.*)\"/, arr){line = line"#"arr[1]};match($0, /\[\"name\"\] = \"(.*)\"/, arr){line = line"#"arr[1]; print line; line =""};')  
14.
 
15.
 
16.
SEARCH_LINE=$(echo -e "\n $_RULES" | column -t | grep $_MAC) 
17.
if [ -n "$SEARCH_LINE" ]; then 
18.
	#echo "Found MAC address in network, continue ..." 
19.
 
20.
	IFS='#' read -r -a array <<< "$SEARCH_LINE" 
21.
	DEVICE_UID="${array[0]}" 
22.
	DEVICE_NODE="${array[1]}" 
23.
	DEVICE_IP="${array[2]}" 
24.
	DEVICE_MAC="${array[3]}" 
25.
	DEVICE_NAME="${array[4]}" 
26.
   else 
27.
	echo "Sorry, could not find $_MAC in your network." 
28.
	exit 1 
29.
fi 
30.
 
31.
# Sending magic packet to device ... 
32.
echo "Sending magic packet to $DEVICE_MAC ($DEVICE_NAME) ..." 
33.
curl --data "plc_desc=$DEVICE_NAME&dev_name=$DEVICE_NAME&btn_wake=&back_to_page=/net/network_user_devices.lua&dev=$DEVICE_UID" "$_BOXURL/net/edit_device.lua?sid=$_SID"
Bitte warten ..
Mitglied: netzdompteur
28.02.2016 um 21:22 Uhr
Die Scripte sind ausgezeichnet. Ich beschäftige mich gerade mit den Portfreigaben.
Das Script4 zeigt schön, wie das geht, die Einstellungen auszulesen.
Nur hätte ich gerne, das ich auch Portfreigaben setzen kann bzw. vorhandene Portfreigaben aktivieren und deaktivieren kann.
Als Anregung hatte ich das Script Wake-OnLAN im Auge, wo zumindest die letzten Curl-Zeilen in abgewandelter Form verwendbar sein sollten.
Nur habe ich das nicht hinbekommen, wie der Post genau aussehen muss bzw. wie das mit CURL aussehen muss.
So viel habe ich rausgekriegt, das ein POST mit diesen Parametern gesendet wird:


01.
active_1=1 
02.
active_2=1 
03.
active_3=1 
04.
active_5=1 
05.
sid=d9a82535766a23a3 
06.
apply
Aktivert Regel 1-3 und 5

01.
active_1=1 
02.
active_2=1 
03.
active_5=1 
04.
sid=d9a82535766a23a3 
05.
apply
Deaktiviert die Regel 3 wieder.

Das Ganze wird dann wohl so geschickt:
01.
curl --data "$_BOXURL/internet/port_fw.lua?sid=$_SID  .....?
Eine andere Option ist, die Regel komplett zu setzen. Dann sehen die Postdaten so aus:

01.
current_rule=rule5 
02.
is_new_rule=true 
03.
was_exposed_host=false 
04.
forwardrules_rule5_activated=1 
05.
selected_app=other 
06.
forwardrules_rule5_description=RemoteAccess 
07.
forwardrules_rule5_protocol=TCP 
08.
forwardrules_rule5_port=80 
09.
forwardrules_rule5_endport=80 
10.
selected_lan_device=manuell#manuell 
11.
forwardrules_rule5_fwip=10.174.110.120 
12.
forwardrules_rule5_fwport=80 
13.
sid=d9a82535766a23a3 
14.
rule=rule5 
15.
apply
Wie könnte da der Aufruf mit CURL aussehen ?
Dann fehlt nur noch, wie man die Portfreigabe wieder löscht.

Hat hier jemand eine Idee oder Hinweis ?
Bitte warten ..
Mitglied: netzdompteur
28.02.2016 um 22:48 Uhr
Kaum hat man mal das Problem niedergeschrieben, so kommt man auf die richtigen Tools und Lösung:

Der Aufruf muss so aussehen:

01.
 curl -s "$_BOXURL/internet/port_fw.lua" -d "active_1=1&active_2=1&active_3=1&active_5=1&sid=$_SID&apply="
Rausbekommen mit Firebug, der wunderschön die Daten ausgibt, was im Post steht.
Bitte warten ..
Mitglied: colinardo
02.05.2016, aktualisiert um 15:21 Uhr

---> Update

Login Methode für Firmware 6.5x hinzugefügt

Für alle die es interessiert. ich habe eine neue Anleitung für das Steuern der FritzBox mit Powershell und dem TR-064 Protokoll verfasst:

Powershell: FritzBox über TR-064 im Netzwerk konfigurieren und auslesen

Grüße Uwe
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
TK-Netze & Geräte
Panasonic KX-TG6811 an Fritz Box 7490 (21)

Frage von bytetix zum Thema TK-Netze & Geräte ...

Router & Routing
Cisco langsam hinter Fritz!box (5)

Frage von PharIT zum Thema Router & Routing ...

LAN, WAN, Wireless
Langsame Verbindung zu FRITZ!Box (1)

Frage von eQuest zum Thema LAN, WAN, Wireless ...

Router & Routing
gelöst Fritz!Box 6490 Cable hängt in Dauerreboot Schleife (5)

Frage von ketanest112 zum Thema Router & Routing ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (10)

Frage von 1410640014 zum Thema Backup ...