gpt4 book ai didi

python - 终止后从 tcpdump 子进程获取 stdout

转载 作者:太空狗 更新时间:2023-10-29 21:40:54 24 4
gpt4 key购买 nike

我在这样的子进程中运行 tcpdump:

pcap_process = subprocess.Popen(['tcpdump', '-s 0', '-w -', 'tcp'], 
stdout=subprocess.PIPE, stderr=subprocess.PIPE)

-w - 参数很重要:它告诉 tcpdump 将生成的 .pcap 文件打印到 stdout

然后我继续使用 urllib.open() 访问网站。完成后,我想终止 tcpdump 并将它打印的任何内容放入字符串中。我尝试了以下方法:

pcap_process.terminate()
result = pcap_process.stdout.read() # or readline(), etc.

但是(除非我做错了什么),那是行不通的;我杀死了这个过程,现在没有什么可读的了。如果我在终止之前使用 read()communicate(),我的脚本将只是坐在那里继续阅读,等待 tcpdump完成(它不会)。

有没有办法做到这一点(最好没有循环)?

最佳答案

不使用 tcpdump,通常建议使用 PCAP directly , 或 Scapy .

如果这不是一个选项,只需在 terminate 之后调用 communicate - 终止进程不会终止管道中的数据。但是,不要忘记在创建子流程时分隔参数([,'-w', '-'] 而不是 [..., '-w -', ..]):

pcap_process = subprocess.Popen(['tcpdump', '-s', '0', '-w', '-', 'tcp'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)

关于python - 终止后从 tcpdump 子进程获取 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7163877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com