Я бы хотел запустить tcpdump из python за 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()