我要执行3个功能:
tcpdump
tcpdump
为其生成pcap tcpdump
。def launch_tcpdump(output_filename):
import subprocess as sp
import time
process = sp.Popen(['tcpdump', '-i', 'wlo1', '-w', output_filename])
print(f"PID: {process.pid}")
time.sleep(5)
return process
如果5秒钟不睡觉,那么在初始化tcpdump
之前,我的脚本将完成网络活动。另一方面,睡眠5秒钟似乎过多,并且减慢了我的整体速度(我必须多次这样做,并为每次网络活动生成pcap)。
注意:我知道初始化在不同的过程中可能具有不同的含义。我猜想它一旦输出:tcpdump: listening on wlo1, link-type EN10MB (Ethernet), capture size 262144 bytes
,就完成了初始化。因此,读取stdout也是一个潜在的选择,但是当将python与子进程分离时,我无法找到可以从stdout读取的解决方案。
答案 0 :(得分:0)
您可以监视tcpdump
的输出并在多行之后返回。
import subprocess as sp
import time
def launch_tcpdump(output_filename):
lines_to_read = 200
process = sp.Popen(['tcpdump', '-l', '-i', 'wlo1', '-w', output_filename])
print(f"PID: {process.pid}")
while lines_to_read > 0:
for _ in iter(process.stdout.readline, ''):
lines_to_read -= 1
return process
通知,我添加了-l
选项,因此tcpdump
写入stdout
以及输出文件。您也可以更改此设置,以检查您在stdout
中提到的初始化行的存在。