La manipulation de l'outil tcpdump sortie en python
Im essayant de gérer tcpdump sortie en python.
Ce que j'ai besoin est d'exécuter l'outil tcpdump (qui capture les paquets et me donne des informations) et la lecture de la sortie et de la traiter.
Le problème est que tcpdump continue de fonctionner pour toujours et j'ai besoin de lire le paquet d'info dès qu'il sort et continuer à le faire.
J'ai essayé de regarder dans les sous-processus de python et essayé d'appeler à l'aide de tcpdump popen et de la tuyauterie de la sortie standard (stdout), mais il ne semble pas fonctionner.
Toutes les directions sur la façon de procéder à cet égard.
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()
Vous pouvez poster votre code jusqu'à présent? Merci.
vous pourriez l'utilisation de pseudo-tty pour ligne de force-tampon de sortie
vous pourriez l'utilisation de pseudo-tty pour ligne de force-tampon de sortie
OriginalL'auteur ashish g | 2013-07-28
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire tcpdump ligne tamponnée avec l'option "-l". Ensuite, vous pouvez utiliser des sous-processus de capturer la sortie comme elle vient.
for line in iter(p.stdout.readline, b''): print line,
en Python 2 en raison de "readahead tampon" bugfor line in p.stdout:
introduit un retard inutile dans la sortie sur Python 2 (OP veut: "dès que les sorties"). Utilisationiter(..)
comme je l'ai mentionné ci-dessus. Voir Python: lire le streaming d'entrée de sous-processus.communiquer()OriginalL'auteur swstephe
Par défaut, les tuyaux sont bloc tampon et interactive sortie de ligne est mis en mémoire tampon. Il semble que vous besoin d'une ligne tampon de tuyau venant de tcpdump dans un sous-processus.
Dans les vieux jours, nous vous recommandons de Dan Bernstein "pty" programme pour ce genre de chose. Aujourd'hui, il semble que pty n'a pas été mis à jour depuis longtemps, mais il y a un nouveau programme appelé "vide" qui est plus ou moins la même idée:
http://empty.sourceforge.net/
Vous pouvez essayer de lancer tcpdump sous vide dans votre sous-processus pour faire tcpdump ligne de tampon, même si c'est écrit à un tuyau.
pty
module dans stdlib. Oupexpect
pourrait être utilisé. Il y a aussi desstdbuf
,script
,unbuffer
des utilitaires qui peuvent ligne de force-tampon de sortieOriginalL'auteur dstromberg