Ich möchte die von mir besuchten URLs protokollieren und verwende daher eine Befehlszeile wie diese:
tcpdump -ien1 -v -X 'TCP-Port 80' | sed -nl 's/^.0x[0-9a-f]{4}:.{43}(.)$/\1/p' |perl break.pl |perl -pe ‚s/(GET|POST).(.?).HTTP/1....Host:.([a-zA-Z._0-9-])../"\nBEGURL ".localtime().": $1 http://$3$2\n"/ge' | grep "^BEGURL"
Es funktioniert gut, eine URL pro Zeile. Aber wenn ich
tcpdump -ien1 -v -X 'TCP-Port 80' | sed -nl 's/^.0x[0-9a-f]{4}:.{43}(.)$/\1/p' |perl break.pl |perl -pe ‚s/(GET|POST).(.?).HTTP/1....Host:.([a-zA-Z._0-9-])../"\nBEGURL ".localtime().": $1 http://$3$2\n"/ge' | grep "^BEGURL">> /tmp/aus
(beachten Sie das Ende >> /tmp/out) Dann ist die Datei leer! Wissen Sie, warum? Für mich ist das völlig unlogisch.
Ich habe auch versucht, stdout und stderr nach /tmp/out umzuleiten, es ist immer noch leer. Die Datei hat Schreibzugriff. Ich habe keine Ahnung, was es sein kann. Gibt es noch etwas anderes als stdout und stderr??
für jede Hilfe.
Antwort1
Sie meinen vielleicht, dass Sie dies versucht haben, wenn Sie sagen „Ich habe auch versucht, stdout und stderr nach /tmp/out umzuleiten“ – aber das scheint das wahrscheinlichste Problem zu sein: Versuchen Sie also, am Ende 2>&1 hinzuzufügen.
Wenn nicht, versuchen Sie zur Unterstützung des Debuggens, Ihrem ersten Befehl 2>/dev/null hinzuzufügen, und prüfen Sie, ob Sie immer noch eine Ausgabe erhalten.
Können Sie den Befehl zum Testen auch vereinfachen? Funktioniert beispielsweise Folgendes:
tcpdump -ien1 -v -X 'tcp port 80' >> /tmp/out
Antwort2
Ich hatte vor ein paar Tagen das gleiche Problem. Versuchen Sie, die -w
Option zu verwenden, um die Pakete in eine Datei zu schreiben. Weitere Informationen finden Sie unter man tcpdump
.