Sono in esecuzione tcpdump
in un sottoprocesso come questo:Getting stdout da un sottoprocesso tcpdump dopo aver terminato lo
pcap_process = subprocess.Popen(['tcpdump', '-s 0', '-w -', 'tcp'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
L'argomento -w -
è importante: si dice tcpdump
per stampare il file .pcap risultante a stdout
.
Quindi accedo per accedere a un sito Web utilizzando urllib.open()
. Fatto questo, vorrei uccidere tcpdump
e inserire qualsiasi cosa stampata in una stringa. Ho provato quanto segue:
pcap_process.terminate()
result = pcap_process.stdout.read() # or readline(), etc.
Ma (a meno che sto facendo qualcosa di sbagliato), che non funziona; Ho ucciso il processo, ora non c'è più niente da leggere. Se uso read()
o communicate()
prima di terminare, il mio script si limiterà a sedersi lì e leggere e continuare ad attendere che tcpdump
termini (cosa che non lo farà).
C'è un modo per farlo (preferibilmente senza loop)?
È necessario passare ciascuno dei parametri di 'tcpdump' separatamente:' Popen ([ 'tcpdump', '-s', '0', '-w', '-', 'tcp'], ...) '. Il singolo argomento '-w -' non viene interpretato come i due argomenti' -w' e '-', ecc. –
Vero, sarebbe stata la risposta giusta :) Grazie comunque! –