seb*_*n_k 7 python subprocess tcpdump
我tcpdump在这样的子进程中运行:
pcap_process = subprocess.Popen(['tcpdump', '-s 0', '-w -', 'tcp'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)
该-w -参数是很重要的:它告诉tcpdump给打印结果.pcap文件stdout.
然后我继续使用访问网站urllib.open().完成此操作后,我想杀死tcpdump并将其打印的任何内容放入字符串中.我尝试过以下方法:
pcap_process.terminate()
result = pcap_process.stdout.read() # or readline(), etc.
Run Code Online (Sandbox Code Playgroud)
但是(除非我做错了),这不起作用; 我杀了这个过程,现在没什么可读的.如果我使用read()或communicate()在终止之前,我的脚本将只是坐在那里继续阅读,等待tcpdump完成(它不会).
有没有办法做到这一点(最好没有循环)?
而不是使用tcpdump,通常建议直接使用PCAP或Scapy.
如果这不是一个选项,只需拨打communicate后terminate-杀的过程不会在管道它杀死的数据.但是,不要忘记在创建子进程([,'-w', '-']而不是[... , '-w -', ..])时分隔参数:
pcap_process = subprocess.Popen(['tcpdump', '-s', '0', '-w', '-', 'tcp'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4768 次 |
| 最近记录: |