Tcpdump / awk

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

trmax

Benutzer
Registriert
23. Juli 2015
Beiträge
6
Reaktionspunkte
0
Punkte
1
Guten Morgen!

Ich habe ein Problem mit dem Ausführen eines Script welches eigentlich immer gelaufen ist und jetzt nach einem Systemwechsel nicht mehr will.

Per TCPDUMP greife ich die Ethernet-Schnittstelle an Port 9201 ab und lese damit Daten eines Datalogger aus, welcher mir in unterschiedlichen Abständen Datensätze senden.

Per Script analysiere ich diese und schreibe sie in eine Datei.

Die Daten kommen wie folgt daher:

PHP:
E.....@...........X...#.....#STA:000001,821;L:146; TM:840405013001;D:2;T:01;C:52;A01:3.417;A02:6.500; A03:185.5;A04:0.700;A05:0.900;A06:355.0;A07:183.4; K01:10000000000;O01:0000;11;#
Script zum Zerlegen und Speichern:

PHP:
#!/bin/bash

tcpdump -l -A -i eth0 '(port 9201)' -n -q -e | grep --line-buffered STA | awk -F 'STA:' '{print $NF}' | awk -F "[;]" {'print substr($7,5)";"substr($8,5)";"substr($9,5)";"subst r($10,5)";"substr($11,5)";"substr($12,5)";"substr( $13,5)'} | awk '{ print strftime("%d.%m.%Y"";""%H:%M:%S"";"), $0; fflush(); }'>> /volume1/smartlogger/log.txt

Der Output ist beispielsweise so: 23.11.2018;22:55:17; 3.417;2.375;356.3;0.300;0.500;354.0;355.6

Zum Testen habe ich folgendes probiert:

Ich sende per Echo eine Nachricht und lasse sie durch awk aufbereiten und speichern. Das funktioniert in der Kommandozeile
PHP:
echo "E.....@...........X...#.....#STA:000001,821;L:146 ;TM:840405013001;D:2;T:01;C:52;A01:3.417;A02:6.500 ;A03:185.5;A04:0.700;A05:0.900;A06:355.0;A07:183.4 ;K01:10000000000;O01:0000;11;#"

grep --line-buffered STA | awk -F 'STA:' '{print $NF}' | awk -F "[;]" {'print substr($7,5)";"substr($8,5)";"substr($9,5)";"subst r($10,5)";"substr($11,5)";"substr($12,5)";"substr( $13,5)'} | awk '{ print strftime("%d.%m.%Y"";""%H:%M:%S"";"), $0; fflush(); }'>> /volume1/smartlogger/log.txt

Führe ich aber das Script aus (also nicht in der Kommandozeile), so ist die Datei immer leer.
Ich habe nun das Script so abgeändert, dass nur mehr folgendes beinhaltet war. Das funktioniert wieder:
PHP:
#!/bin/bash
tcpdump -l -A -i eth0 '(port 9201)' -n -q -e | grep --line-buffered STA >> /volume1/smartlogger/log.txt

Daher liegt das Problem beim awk, was nicht richtig ausgeführt wird, wenn es nicht direkt in der Komandozeile ausgeführt wird.

Wo liegt da das Problem?
 
Daher liegt das Problem beim awk, was nicht richtig ausgeführt wird, wenn es nicht direkt in der Komandozeile ausgeführt wird.
Sowas liegt oft am Pfad, evtl. wird awk (ohne Pfad) einfach nicht gefunden. Nimm mal den PATH=..., export PATH-Teil aus der /etc/profile mit ins Script auf.
 
hallo Benares!

Ich mach grad meine ersten Versuche mit Scripting. kannst du mir konkret auf die Sprünge helfen?
 
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin

echo "HALLO"

tcpdump -l -A -i eth0 '(port 9201)' -n -q -e |grep --line-buffered STA | awk -F'STA:' '{print $NF}' |awk -F "[;]" {'print substr($7,5)";"substr($8,5)";"substr($9,5)";"substr($10,5)";"substr($11,5)";"substr($12,5)";"substr($13,5)'} |awk '{ print strftime("%d.%m.%Y"";""%H:%M:%S"";"), $0; fflush(); }' >> testlog_mit_path.txt


wieder kein erfolg
 
Update: ERFOLG

folgendes hab ich getrennt in 2 einzelne Files und als zwischenlösung eine TMP-Datei die sich immer entleert:

#!/bin/bash
echo "HALLO"
tcpdump -l -A -i eth0 '(port 9201)' -n -q -e |grep --line-buffered STA >> /volume1/smartlogger/tmp_datastream


und

#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin




echo "HALLO"
sed -r 's#^.*(STA)#\1#' /volume1/smartlogger/tmp_datastream | awk -F "[;]" {'print substr($7,5)";"substr($8,5)";"substr($9,5)";"substr($10,5)";"substr($11,5)";"substr($12,5)";"substr($13,5)'} | awk '{ print strftime("%d.%m.%Y"";""%H:%M:%S"";"), $0; fflush(); }' > /volume1/smartlogger/tmp_mysql

IFS=";"
while read column1 column2 column3 column4 column5 column6 column7 column8 column9

do
echo "INSERT INTO s_9201 (column1,column2,column3,column4,column5,column6,column7,column8,column9) VALUES ('$column1', '$column2', '$column3', '$column4', '$column5', '$column6', '$column7', '$column8', '$column9');"

done < /volume1/smartlogger/tmp_mysql | /usr/local/mariadb10/bin/mysql -u ***-p****-D smart_data_logger > /volume1/smartlogger/tmp_datastream




ein Problem gibts noch: wie kann ich ohne sudo auf tcptump zugreifen?
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat