SED und TCPDUMP

trmax

Grünschnabel
Beiträge
2
Hallo!

Ich versuche einen TCPDUMP mit SED zu begrenzen und in die Datei test.txt zu schreiben.
Leider läuft die Sache nich so recht bzw. die Ausgabe bleibt leer.

Code:
tcpdump -tttt udp port 9201 -A | sed -e 's/.*\STA://' >> test.txt

Nur TCPdump ausgeführt zeigt folgendes Ergebnis in der Konsole:

Code:
2015-01-15 10:18:01.778716 IP 089144207235.atnat0016.highway.bob.at.25756 > XXX.com.9201: UDP, length 151
E....O@.....Y...mI2.d.#.....#STA:000001,821;L:146;TM:150115102201;D:0;T:01;C:59;A01:58.01;A02:19.37;A03:00000;A04:00000;A05:00000;A06:133.0;A07:00000;K01:10000000000;O01:0000;E6;#


In der Datei soll folgendes stehen:

Code:
000001,821;L:146;TM:150115102201;D:0;T:01;C:59;A01:58.01;A02:19.37;A03:00000;A04:00000;A05:00000;A06:133.0;A07:00000;K01:10000000000;O01:0000;E6;#


Was aber schon funktioniert ist, Wenn ich mit TCPdump die Zeile in eine File schreibe und danach mit CAT und SED ausgebe.

Was mache ich da falsch?

vielen Dank,
Markus
 

Programmer78

Doppel-As
Beiträge
146
Das Problem ist glaube ich die Option -A ... ein Echtzeit-Mitschnitt

Probier mal nach dem Motto ...

tcp ... blabla -A | while read i; do echo "$i" | grep STA | sed 's/^.*STA://' >>datei ; done
 

tgruene

Routinier
Beiträge
418
Eventuell hilft auch die Option '-l'
Code:
tcpdump -tttt udp port 9201 -A -l | sed -e 's/.*\STA://' >> test.txt
Andererseits funktioniert die Weiterleitung an sed bei mir (Linux Debian wheezy) auch ohne -l. Vielleicht liegt es an dem Backslash vor dem S in \STA? Der scheint mir doch fehl am Platze, oder?
 

trmax

Grünschnabel
Beiträge
2
es lag an dem Parameter -l bei tcpdump (io buffer).
Somit kann ich jetzt eine Textfile mit folgenden Einträgen anlegen (comma separated)

Code:
16-01-2015;22:06:03; 57.76;19.31

Als letztes muss ich die in einem Zug in eine mysql-db schreiben.
Dies gelingt mir auch schon zum Teil in einem eigenen Script.

Code:
IFS=";"
while read column1 column2 column3 column4
      do
        echo "INSERT INTO s_9201 (column1,column2,column3,column4) VALUES ('$column1', '$column2', '$column3', '$column4');"

done < testlog.txt | mysql -u XXX -pXXX -D smart_data_logger;


Die Frage ist nur, wie schaffe ich es, dass es auf einmal läuft?

Code:
#tcpdump -l -A -i eth0 '(port 9201)' -n -q -e |grep --line-buffered STA | mawk -Winteractive -F "[;]" {'print substr($7,5)";"substr($8,5)'} >> datalog.txt
 

marce

Kaiser
Beiträge
1.297
Pipe in die while-Schleife schon getestet?

Manchmal kann es - z.B. aus Wartbarkeitsgründen - aber auch sinnvoll sein, "so Monster-Klopper" in 2 parallel laufenden Scripten unabhängig voneinander zu haben...
 

Ähnliche Themen

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Rollei Mini Wifi Camcorder

Variableninhalt wird nicht gespeichert

Modulfehler?

Last mit etc/passwd anzeigen lassen

Oben