1

我发现了一个不错的 python 模块 pyshark,据我所知,它可以像 tshark 一样使用 bpf 过滤。我实际上正在寻找带有 bpf 过滤和显示过滤的实时捕获选项,以对这些数据执行其他操作并将它们存储到 db 以供以后分析。根据文档 pyshark 可以进行实时捕获,但我不知道如何为收到的每个数据包显示和发送到文件或数据库数据。我正在运行 IPv6 实验室网络。这是示例 python 脚本:

import pyshark
capture = pyshark.LiveCapture(interface='eth1',bpf_filter="tcp and port 80")
capture.sniff(timeout=20)

超时后,我可以打印时间和纪元时间,但只能打印每个数据包。包裹的其他部分我看不到

print capture[1].sniff_time
print capture[1].sniff_timestamp

我将不胜感激任何帮助和指导,以进行实时捕获和每个数据包的数据以发送到数据库

4

2 回答 2

1

您无法访问原始数据包数据,但您可以通过访问相关层来访问数据包字段,例如 packet.udp.src_port 您可以通过打印数据包轻松查看所有字段

于 2014-06-04T19:11:34.827 回答
1

希望这会有所帮助,捕获超时为 1 秒的数据包并检索它们

import pyshark
capture = pyshark.LiveCapture(interface=r'\Device\NPF_{D41D8EE1-2739-4FA1-8873-024D3F68E9E1}',
                              output_file=r'C:\Temp\samp1.pcap')
capture.sniff(timeout=1)
pkts = [pkt for pkt in capture._packets]
print(len(capture))
capture.close()

但是使用 capture.close() 似乎有一些 asyncio 异常。无论如何,这不会影响我们的代码。输出如下

94

taking long time to close proactor

Task exception was never retrieved

future: <Task finished coro=<_close_async() done, defined at C:\Python34\lib\site-packages\pyshark\capture\capture.py:409> exception=RuntimeError('Set changed size during iteration',)>

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\trollius\tasks.py", line 255, in _step
    result = next(coro)
  File "C:\Python34\lib\site-packages\pyshark\capture\capture.py", line 411, in _close_async
    for process in self.running_processes:

RuntimeError: Set changed size during iteration

Task was destroyed but it is pending!

task: <Task pending coro=<packets_from_tshark() running at C:\Python34\lib\site-packages\pyshark\capture\capture.py:261> wait_for=<Task finished coro=<_close_async() done, defined at C:\Python34\lib\site-packages\pyshark\capture\capture.py:409> exception=RuntimeError('Set changed size during iteration',)>>

Process finished with exit code 0
于 2017-10-17T06:24:03.940 回答