我找到了一个不错的python模块pyshark,据我所知,可以像使用bpf过滤的tshark一样使用。我实际上正在寻找带有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
我将不胜感激任何帮助和方向,每个数据包的实时捕获和数据发送到数据库
答案 0 :(得分:1)
您无法访问原始数据包数据,但您可以通过访问相关层(例如packet.udp.src_port)来访问数据包字段 您可以通过打印数据包轻松查看所有字段
答案 1 :(得分: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