在后台运行pyshark

2024-04-27 12:19:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在后台运行pyshark,这样在它运行时,我仍然能够执行一些web操作并捕获它们。 一个强制性条件是,我必须能够使用tshark进行解析,因为我有一些专有的Wireshark解析器

基本上我需要做的是:

  1. 启动网络捕获
  2. 执行一些web操作
  3. 停止捕获(或等待停止条件)
  4. 迭代捕获对象并检查每个数据包的属性

我不能按原样使用capture.sniff(),因为它在阻塞模式下工作,也不能连续使用capture.sniff\u(),因为它是一个生成器

问题: 我尝试从线程调用sniff(),然后等待它以join()结束。 但是当我到达迭代器时,tshark.exe会重新启动并覆盖捕获文件:

print('Background sniffing:')
capture = pyshark.LiveCapture(interface='Ethernet', bpf_filter='host 10.20.30.40', output_file='bg_capture.pcapng')
t = threading.Thread(target=capture.sniff, kwargs={'timeout': 30, 'packet_count': 5000}, daemon=True)
t.start()
print('Do some stuff web action here...')
t.join()
print('Done sniffing')
for p in capture: # At this point, tshark re-launch itself
    print(f'Packet number {p.number}')

Tags: 网络web解析器number条件后台captureprint