Ich verarbeite die Ausgabe von tcpdump unter Ubuntu 16.04LTS mit dem folgenden Befehl:
$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -l | python script.py
Das funktioniert, aber leider sind es zu viele Pakete, die die Skripte, die ich schreiben möchte, verarbeiten müssen. Daher möchte ich Pakete, die von derselben IP-Adresse kommen, etwa alle 100 ms entfernen. Ich sehe in der Manpage von tcpdump keine Möglichkeit, dies zu tun. Gibt es eine Möglichkeit, das zu tun?
Ich habe gesehen, dass Sie die Puffergröße mit anpassen können -B
, aber wenn ich versuche, Folgendes mit einem Python-Testskript auszuführen (das einfach ausgibt, was es auf stdin liest):
$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l | python test.py
Ich bekomme nichts als leere Zeilen als Ausgabe an das Terminal. Ich verstehe nicht, wie der Puffer funktioniert, denn wenn ich ihn nicht an ein Skript weiterleite, funktioniert die Ausgabe an das Terminal einwandfrei mit:
$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l
(Python-Skript):
import sys
while True:
print sys.stdin.readline()
Kann jemand erklären, ob es eine Möglichkeit gibt, die Anzahl der pro Sekunde von jeder IP-Adresse ausgegebenen Pakete effektiv zu begrenzen, und wenn nicht, wie die Option -B funktioniert und ob sie an ein Python-Skript wie dieses weitergeleitet werden kann?
Antwort1
Nach einigem Ausprobieren fand ich heraus, dass die Option -B fehlschlug, wenn ich einen Wert unter 256 eingab. Falls das also jemandem hilft, verwenden Sie mindestens-B 256