Umgang mit tcpdump output in python
Ich versuche zu verarbeiten tcpdump output in python.
Was ich brauche, ist die Ausführung von tcpdump (die fängt die Pakete und gibt mir Informationen) und die Ausgabe Lesen und verarbeiten.
Das problem ist, dass tcpdump läuft ewig und ich brauche zum Lesen der Paket-info, sobald es ausgibt und fortfahren, es zu tun.
Ich habe versucht, in Teilprozess der python und versuchte Aufruf tcpdump mit popen und umleiten der Standardausgabe, aber es scheint nicht zu funktionieren.
Alle Anweisungen, wie gehen Sie mit diesem.
import subprocess
def redirect():
tcpdump = subprocess.Popen("sudo tcpdump...", stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
while True:
s = tcpdump.stdout.readline()
# do domething with s
redirect()
- Kannst du den code so weit? Danke.
- Sie könnten mit pseudo-tty zu zwingen, line-buffered-Ausgabe
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie machen tcpdump-line-buffered-mit "-l". Dann können Sie Unterprozess zum erfassen der Ausgabe, wie es rauskommt.
for line in iter(p.stdout.readline, b''): print line,
in Python 2 durch "Read-ahead buffer" bugfor line in p.stdout:
führt unnötige Verzögerung in der Ausgabe auf Python 2 (OP will: "sobald ausgegeben"). Verwendeniter(..)
wie ich schon oben erwähnt. Siehe Python: Lesen Sie streaming input von Teilprozess.kommunizieren()Standardmäßig sind die Rohre block-gepuffert und die interaktive Ausgabe ist line buffered. Es klingt wie Sie brauchen eine Linie, gepufferte pipe - aus tcpdump in einen Teilprozess.
In den alten Tagen, würden wir empfehlen Dan Bernstein ' s "pty" - Programm für diese Art der Sache. Heute scheint es, dass pty nicht aktualisiert wurde, in eine lange Zeit, aber es gibt ein neues Programm namens "leere", die mehr oder weniger die gleiche Idee:
http://empty.sourceforge.net/
Könnten Sie versuchen, ausführen von tcpdump unter leere in Ihren Teilprozess zu machen tcpdump-line buffered, obwohl es das schreiben in eine pipe.
pty
Modul in stdlib. Oderpexpect
verwendet werden könnten. Es gibt auchstdbuf
,script
,unbuffer
Dienstprogramme, können Kraft-line-buffered output