String aus Webseite extrahieren

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von hennerich, 01.01.2010.

  1. #1 hennerich, 01.01.2010
    hennerich

    hennerich Jungspund

    Dabei seit:
    15.07.2004
    Beiträge:
    21
    Zustimmungen:
    0
    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:

  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bitmuncher, 01.01.2010
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    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
     
  4. #3 hennerich, 02.01.2010
    hennerich

    hennerich Jungspund

    Dabei seit:
    15.07.2004
    Beiträge:
    21
    Zustimmungen:
    0
    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
     
  5. #4 hennerich, 23.01.2010
    hennerich

    hennerich Jungspund

    Dabei seit:
    15.07.2004
    Beiträge:
    21
    Zustimmungen:
    0
    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
     
  6. #5 bytepool, 24.01.2010
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    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.

    Zum weiter Verarbeiten sollte der Punkt eigentlich schon ganz richtig sein, aber wenn man's braucht, liesse sich zum Beispiel tr verwenden.

    man date.

    mfg,
    bytepool
     
  7. #6 hennerich, 30.01.2010
    hennerich

    hennerich Jungspund

    Dabei seit:
    15.07.2004
    Beiträge:
    21
    Zustimmungen:
    0
    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
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

String aus Webseite extrahieren

Die Seite wird geladen...

String aus Webseite extrahieren - Ähnliche Themen

  1. FIND mit UND-Verknüpfung im Suchstring

    FIND mit UND-Verknüpfung im Suchstring: Hallo, ich schaffe es einfach nicht bei folgendem Kommando die Suchoptionen zu erweitern, damit nur Dateien beginnend mit "T_*" aufgelistet...
  2. String auf Konsole ausgeben

    String auf Konsole ausgeben: Hallo zusammen, ich bin auf ein Problem gestoßen dass für mich sehr unverständlich ist, aber vllt übersehe ich auch etwas Offensichtliches. Es...
  3. String einer bestimmten Zeile durchsuchen

    String einer bestimmten Zeile durchsuchen: Hallo, wie kann ich den eine bestimmte Zeile einer Textdatei zerlegen und daraus ein Stück entnehmen? Ich suche nach der Zeile in der "model...
  4. alles außer letzte 4 strings

    alles außer letzte 4 strings: Hallo, ich habe verschieden lange Strings (Dateinamen) und möchte gerne den Dateinamen als Variable ausgeben: 1. Strings...
  5. Firefox erhält JavaScript-String-Optimierung

    Firefox erhält JavaScript-String-Optimierung: Eine Optimierung, die in Firefox 33 zu erwarten ist, wird für JavaScript-Strings wesentlich weniger Speicher benötigen. Damit wird in Firefox 33...