drwindows97
Goto Top

Wie kann ich mit einem Shell Skript den Routerlog von Speedports auslesen?

Hallo Administratoren,
ich schaue mir oft den Router Log an um die Vorgänge im Netzwerk besser zu kontrollieren.

Da der Router allerdings keinen großen Speicher hat fehlen immer eine paar Einträge. Deshalb such ich nun nach einer simplen Lösung den Router Log von einem Shell Skript auszulesen und separat zu speichern.

Das Problem das dabei existiert ist die zwingend notwendigen Eingabe eines Paswortes um auf die Logseite zugreifen zu dürfen.

Die Logseite liegt bei http://speedport.ip/cgi-bin/log
Die Loginseite liegt bei http://speedport.ip/top_start_passwort.stm

Danke für eure Hilfe.

Content-Key: 214568

Url: https://administrator.de/contentid/214568

Printed on: April 23, 2024 at 07:04 o'clock

Member: MrNetman
MrNetman Aug 17, 2013 at 10:20:13 (UTC)
Goto Top
Die Logs werden im Arbeitsspeciher gehalten und gehen beim Neustart verloren - https://feedback.telekom-hilft.de/topics/hallo-wie-lange-ist-die-speiche ...

Aber: Es gibt ungefähr 1000 verschiedene Speedport Modelle und Versionsnummern.
Prinzipiell sollte das aber gehen.
Und gibt es eine Funktion den Log runter zu laden oder wie bei der Fritzbox sich zusenden zu lassen?

Gruß
Netman
Member: DRwindows97
DRwindows97 Aug 17, 2013 at 10:26:39 (UTC)
Goto Top
Hallo MrNetman,

Der Sinn des ganzen soll ja sein, auf einem Linuxserver die Logs zu sichern, damit sie eben nicht beim Neustart verloren gehen.
Bei dem verwendeten Speedport W502V gibt es leider keine Funktion wie bei den der Fritzbox.
Das heisst man muss sich immer die Seite anschauen und den Log manuell markieren, kopieren und in eine Textdatei einfügen. Und gerade das möchte ich automatisieren.
Member: colinardo
colinardo Aug 17, 2013, updated at Aug 18, 2013 at 05:44:41 (UTC)
Goto Top
Hallo DRwindows97,
unter Linux würde ich mich mit CURL auf der Log-Seite einloggen und den Output von CURL an GREP übergeben das dir dann die gewünschte Stelle an der der Log zu finden ist mit einer RegularExpression ausfiltert und dann in eine Datei sichert.

Für den Speedport W502V müsste folgende CURL Zeile den Login ermöglichen(damit holt man sich die Login cookies):
_SPEEDPORT="speedport.ip"  
_PASSWORD="GEHEIM"  
curl "http://${_SPEEDPORT}/cgi-bin/login.cgi" -e "http://${_SPEEDPORT}/hcti_start_passwort.stm" -d "&pws=${_PASSWORD}" -c cookies.txt  
danach muss man sich dann z.B. mit firebug die Seiten-URL holen die den LOG enthält und den Inhalt der Seite auslesen (Habe hier keinen Speedport für die URL)
In diesem CURL-Aufruf verwendest du dann die gespeicherten Login-Cookies.
curl -s "http://${_SPEEDPORT}/status_startseite.cgi" -e "http://${_SPEEDPORT}/hcti_start_passwort.stm" -b cookies.txt  
Hinweis: -e "http://${_SPEEDPORT}/hcti_start_passwort.stm" ist nicht die URL die aufgerufen werden soll, sondern der REFERER.

Den Inhalt der Seite leitest du dann an GREP und filterst die benötigten Inhalte heraus

Als Beispiel soll dir dieses Script für eine FritzBox dienen, das die Tabelle mit den Anrufen ausließt und in eine Datei schreibt:
#!/bin/bash
_FBOX="http://fritz.box"  
_PASSWORD="GEHEIM"  
_OUTPUTFILE="calls.txt"  
_CHALLENGE=$(curl -s ${_FBOX}/login.lua | grep "^g_challenge" | awk -F '"' '{ print $2 }')  
_MD5=$(echo -n ${_CHALLENGE}"-"${_PASSWORD} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}')  
_RESPONSE=${_CHALLENGE}"-"${_MD5}  
_SID=$(curl -i -s -k -d 'response='${_RESPONSE} -d 'page=' ${_FBOX}/login.lua | grep "Location:" | awk -F '=' {' print $NF '})  
curl -s ${_FBOX}/fon_num/foncalls_list.lua -d 'sid='${_SID} | tr -d '\n' | grep -oP '(?<=<table id="uiCalls" class="zebra_reverse">).*?(?=</table>)' >$_OUTPUFILE  

Hoffe das hilft dir weiter.

Grüße Uwe
Member: DRwindows97
DRwindows97 Aug 17, 2013 at 20:36:53 (UTC)
Goto Top
Das hilft mir wirklich weiter, danke Uwe.
Die Seite die den Log ausgibt ist laut Firebug http://speedport.ip/cgi-bin/log.

Habe ich dann also unten stehendes Skript richtig angepasst ?


#!/bin/bash Ist klar
_BOX="http://speedport.ip"
Variable für Routeradresse
_PASSWORD="123456" Variable für Loginpasswort
_OUTPUTFILE="routerlogfile.txt"
Variable für Outputdatei


curl "http://${_BOX}/cgi-bin/login.cgi" -e "http://${_BOX}/hcti_start_passwort.stm" -d "&pws=${_PASSWORD}" -c cookies.txt
curl -s "http://${_BOX}/cgi-bin/log" -e "http://${_BOX}/hcti_start_passwort.stm" -c cookies.txt
Member: colinardo
colinardo Aug 18, 2013 updated at 10:01:19 (UTC)
Goto Top
du würdest uns einen Gefallen tun wenn du zum posten von Code Tags verwenden würdest, dann käme es nämlich nicht zu solch einem Phänomen das z.B. die doppelten Slashes verschwinden wie hier
_BOX="http:speedport.ip"
außerdem hast du ein doppeltes http: eingebaut.
Deine Zeilen sehen dann wenn die Variable _BOX aufgelöst wird so aus
http://http:speedport.ip/cgi-bin
und das geht natürlich gar nicht. Du müsst dich schon entscheiden wo du das "http" hinterlegst, doppelt gemoppelt geht nicht.
Außerdem war die Option -c Cookies.txt im zweiten curl-Aufruf falsch. Sie muss -b Cookies.txt lauten da du die im vorangegangen Aufruf gespeicherten Cookies ja übergeben willst.

nochmal zusammengefasst für dich:
_BOX="http://speedport.ip"  
_PASSWORD="123456"  
_OUTPUTFILE="routerlogfile.txt"  
curl "${_BOX}/cgi-bin/login.cgi" -e "${_BOX}/top_start_passwort.stm" -d "&pws=${_PASSWORD}" -c cookies.txt  
curl -s "${_BOX}/cgi-bin/log" -e "${_BOX}/top_start_passwort.stm" -b cookies.txt >$_OUTPUTFILE  
wobei hier ja noch die ganze HTML-Datei im OUTPUTFILE landet. Da ich die Seite hier nicht vor mir habe kann ich dir dazu natürlich kein Code liefern.

Noch ein Hinweis falls es nicht funktioniert: Das CURL-Script gilt für den Speedport W502V Fw 1.17 (Typ A). Könnte sein das sich da bei einer neueren Firmware noch was verändert hat.
Eine Liste für die Speedports findet sich hier.

Grüße Uwe
Member: DRwindows97
DRwindows97 Aug 18, 2013 at 13:41:22 (UTC)
Goto Top
Uwe dein Vorschlag hat wunderbar funktioniert.

Ich habe nur noch folgende Zeile angepasst.
curl -s "${_BOX}/cgi-bin/log" -e "${_BOX}/top_start_passwort.stm" -b cookies.txt >>$_OUTPUTFILE

Das in der Datei die Rohdaten stehen ist nicht weiter schlimm, da ich sie via PHP weiterverarbeite.

Vielen Dank für die schnelle Hilfe.
Member: dermaxem
dermaxem Feb 11, 2015 updated at 20:20:34 (UTC)
Goto Top
Hallo,

ich bin auch nach der Suche für so eine Anmeldung und Log-File-Auslesen Sache.
Mein Router ist ein Speedport 921V
die Loginseite lautet:
https://speedport.ip/html/login/index.html

die Seite mit dem Logfile:
https://speedport.ip/html/content/config/system_info.html?lang=de

die Infos liegen dort aber ziemlich verschachtelt: s. Screenshoot:
<img>http://fs2.directupload.net/images/150211/98iqhbag.png</img>

man kann einen Download des Logfiles erzeugen, das geht über einen Button:
 <form action="../../../data/Syslog.json" method="get">  
          <div class="buttongroup" style="padding:0px">  
            <button type="submit" i18n:id="btn_exportList">Liste exportieren</button>  
          </div>
        </form>

-
ich bin leider Linux Neuling. Kann man da ein Script für ein Raspberry machen, das das Logfile dann via Mail verschickt 1x die Woche oder so etwas?