我想从python运行tcpdump,运行x分钟,时间由用户指定。目前我的函数如下:
def tcpdump():
run_time = int(input("\nHow many minutes would you like the bash to run?\n"))
time_to_end = time.time() + 60 * run_time
print("\ntcpdump running...\n")
while time.time() < time_to_end:
p = subprocess.Popen("./tcpdump.bash", shell=True)
p.terminate()
但是,当我得到以下输出时,这似乎重复启动tcpdump:
tcpdump: (all BPF devices are busy)
tcpdump: (all BPF devices are busy)
tcpdump: (all BPF devices are busy)
我不知道如何解决这个问题,另外我也不知道如何终止这个过程,因为p.kill()似乎不起作用。
————————————————————————————————————编辑---
我现在尝试了以下操作,但是我不确定子进程是否被正确杀死,或者它是否会在后台无限地运行:
def tcpdump:
run_time = int(input("\nHow many minutes would you like to collect benign data?\n"))
time_to_end = time.time() + 60 * run_time
print("\ntcpdump running...\n")
p = subprocess.Popen(['tcpdump', '-i', 'en0', '-w', 'test.pcap']))
while time.time() < time_to_end:
p.communicate()
p.kill()