String aus Webseite extrahieren

H

hennerich

Jungspund
Hallo Community,

ich möchte gern den Traffic meines Linksys Routers per Shell Script auslesen und in eine Datei schreiben. Leider ist mein Router (WRT54G3G) nicht in der Lage, gesondert Accountinginformationen auszulesen.
Daher habe ich von einem User aus dem Onlinekosten Forum folgendes Script gefunden:
Code:
#!/bin/bash
#
# functionale: monitors and logs patterns from the http admin gui
# requires: lynx http browser
# v0.1

# configuration
admin_username=admin
admin_password=geheim
url_scheme=http
router_ip=192.168.1.1
context_url=Wireless_Wan.asp
rx_pattern=RX
tx_pattern=TX
log_interval=60
log_file=/var/log/wrt54g3g_volume_log
lynx_executable="/usr/bin/lynx"

# unconditional looping
while [ true ]; do
sleep $log_interval
date >> $log_file
$lynx_executable -auth=$admin_username:$admin_password -dump $url_scheme://$router_ip/$context_url | grep $rx_pattern >> $log_file
$lynx_executable -auth=$admin_username:$admin_password -dump $url_scheme://$router_ip/$context_url | grep $tx_pattern >> $log_file
done
Ich beabsichtige dann, einen ähnlich gearteten Code auf meiner Dreambox (Linux Receiver) laufen zu lassen (der Receiver läuft eh den ganzen Tag und so muss ich keinen PC anlassen).
Da ich aber kein Lynx oder einen anderen Textbrowser darauf installiert habe, möchte ich das ganze mit wget machen.
Dazu habe ich folgende Idee (von einem anderen User) bekommen:
Code:
wget http://user:password@router_ip/Wireless_Wan.asp
grep TX  Wireless_Wan.asp | sed 's/<[^>]*>//g' >> $log_file
grep RX  Wireless_Wan.asp | sed 's/<[^>]*>//g' >> $log_file
rm Wireless_Wan.asp
Die Wireless_Wan.asp Datei sieht folgendermaßen aus (siehe Anhang).
Nun gibt mir aber der obige Code immer nur das:
RX = 2.45 MbytesTX = 11.44 Mbytes
zurück.
Ich würden gern nur die Werte für RX und TX haben. Außerdem wäre es schön, sobald die Session Time kleiner als die des letzten Durchlaufes ist, die beiden Werte (letzter Durchlauf und der aktuelle Wert) miteinander zu addieren. So könnte ich quasi die Verbrauchssumme erstellen. Leider zeigt mir der Router immer die Trafficwerte der aktuellen Sitzung an.
Habt ihr eine Idee wie ich das bewerkstelligen könnte?

Vielen Dank und frohes Neues

Henri
 

Anhänge

  • Wireless_Wan.asp.zip
    11,9 KB · Aufrufe: 5
Wenn du nur die Zahlen willst, musst du einfach eine Pipe zu awk anfügen:

grep TX Wireless_Wan.asp | sed 's/<[^>]*>//g' | awk '{print $3}' >> $log_file
 
Hallo bitmuncher,

vielen Dank für deine Antwort. Ich muss noch einmal dumm nachfragen, sitz grad nicht vorm Ubuntu; Das funktioniert separat für den RX und den TX Wert?
Ich würde gern die beiden Werte getrennt voneinander behandeln, da ich später damit rechnen möchte.

Henri
 
Hallöchen Leute,

ich habe meine Strategie nun umgestellt.
Folgenden String aus meiner Routerseite Wireless_Wan.asp möchte ich auswerten:
Code:
          <TD width=296 height=25><B>RX = 10.69 Mbytes<br>TX = 0.47 Mbytes</B></TD>
Das klappt mit dem Kommando:
Code:
grep TX Wireless_Wan.asp | sed 's/<[^>]*>//g' | awk '{ print "'"$(date)"'" ", "$3" "$4" ,"$6" "$7 }' >> /var/log/wrtlog
soweit schon ganz gut.
Ein paar kleine "Schönheitsfehler" hätte ich aber gern noch gefixt.

1. ich bekomme mit $4 MbytesTX ausgegeben, schön wäre hier nur Mbytes
Dabei muss ich erwähnen, dass hier neben Mbytes auch noch Kbytes oder Gbytes stehen kann.

2. mit $3 und $6 bekomme ich 10.69 bzw. 0.47
Um diese Werte weiter verarbeiten zu können, wäre es schön hier 10,69 bzw. 0,47 zu erhalten

3. kann ich irgendwie das Datum einkürzen von aktuell Sat Jan 23 13:59:07 CET 2010 hin zu z.B. 23.01.2010 13:59

Lässt sich das realisieren und wenn ja wie?

Danke und viele Grüße
Henri
 
Hi,

1. ich bekomme mit $4 MbytesTX ausgegeben, schön wäre hier nur Mbytes
Dabei muss ich erwähnen, dass hier neben Mbytes auch noch Kbytes oder Gbytes stehen kann.
In der bash laesst sich das recht leicht mit Variablen Substitution erreichen. Beispiel:
Code:
$ foo="fooblooTX"
$ echo ${foo%TX}
foobloo
Ich vermute dass das in awk nicht direkt geht, aber du koenntest es ja stattdessen mit cut machen.

2. mit $3 und $6 bekomme ich 10.69 bzw. 0.47
Um diese Werte weiter verarbeiten zu können, wäre es schön hier 10,69 bzw. 0,47 zu erhalten
Zum weiter Verarbeiten sollte der Punkt eigentlich schon ganz richtig sein, aber wenn man's braucht, liesse sich zum Beispiel tr verwenden.

3. kann ich irgendwie das Datum einkürzen von aktuell Sat Jan 23 13:59:07 CET 2010 hin zu z.B. 23.01.2010 13:59
man date.

mfg,
bytepool
 
Hallöchen zusammen,

mittlerweile funktioniert mein Script sehr gut. Nur leider gibt es noch ein grundsätzliches Problem. Mein Router dessen Webinterface ich abfragen und auswerten möchte ist per Authentication geschützt.
Das habe ich ja auch in mein wget mit eingebaut:
wget http://admin:password@$192.168.1.2/Wireless_Wan.asp

Wenn ich nun aber mein Script mehrfach hintereinander (einmal pro Minute) starte, erhalte ich nach dem 3. Mal folgenden Fehler:
Code:
henri@henri-ubuntu:~/Dokumente$ ./traffic.sh 
--2010-01-30 22:30:12--  http://admin:*password*@192.168.1.2/Wireless_Wan.asp
Verbindungsaufbau zu 192.168.1.2:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 200 Unauthorized
Länge: nicht spezifiziert [text/html]
In »Wireless_Wan.asp« speichern.

    [ <=>                             ] 196         --.-K/s   in 0,001s  

2010-01-30 22:30:12 (224 KB/s) - »Wireless_Wan.asp« gespeichert [196]

./traffic.sh: Zeile 55: [: : Ganzzahliger Ausdruck erwartet.
./traffic.sh: Zeile 66: [: : Ganzzahliger Ausdruck erwartet.
Es scheint als ob die Authentisierung gescheitert ist. Nur warum? Weil ich mich bereits eingeloggt habe?

ein ratloser
Henri
 
Zurück
Oben