python scapy过滤pcap文件
python scapy filter pcap file
我必须从 pcap 文件中过滤数据包并进一步处理它们。
这些文件非常大,因此一次将整个文件读入内存是不可行的。 Scapy 似乎非常复杂,我能够使用
遍历数据包
with PcapReader(pcap) as pcap_reader:
for pkt in pcap_reader:
...
不幸的是,我无法找到一种方法将过滤器(例如 BPF)应用于 PcapReader
,因此只会迭代匹配的数据包,也不会迭代 pkt
(应该是 scapy.packet
!?)。
我看到有一个函数tdecode
,它是一个tshark解码器,它以一个过滤器作为参数,但是没有办法将结果包保存到一个变量中,只能用所有结果。
有没有一种方法可以使用 scapy
从 .pcap 文件中过滤数据包并继续迭代结果?
Scapy 慢得令人难以置信,以至于交互使用是唯一的用途。它还不允许在完全(in-python)剖析之前过滤数据包,这加剧了问题。
您可以使用 libpcap
,方法是自己编写一个小的 C 扩展或使用 binding, as a replacement for PcapReader
. libpcap
allows you to specify a filter in BPF-syntax,它应用于库中的传入数据包,或者 - 当从设备 - 由内核本身。这将大大提高您的表现。
基本布局为:
open_offline()
一个 pcap 文件
- 设置 BPF 过滤器
- 从 libpcap 提供的句柄读取
- 将传入的数据包数据传递给 scapy 进行进一步检查
你可以得到quite sophisticated。
您可以使用 tcpdump()
函数来应用 BPF 过滤器。
with PcapReader(tcpdump("myfile.cap", args=["-w", "-", "my BPF filter"],
getfd=True)) as pcap_reader:
for pkt in pcap_reader:
print pkt.summary()
如果您对此感兴趣,也许您可以提交功能请求,以便 PcapReader()
接受 filter
参数(并且表现或多或少类似于 sniff()
offline=
参数。
我必须从 pcap 文件中过滤数据包并进一步处理它们。 这些文件非常大,因此一次将整个文件读入内存是不可行的。 Scapy 似乎非常复杂,我能够使用
遍历数据包with PcapReader(pcap) as pcap_reader:
for pkt in pcap_reader:
...
不幸的是,我无法找到一种方法将过滤器(例如 BPF)应用于 PcapReader
,因此只会迭代匹配的数据包,也不会迭代 pkt
(应该是 scapy.packet
!?)。
我看到有一个函数tdecode
,它是一个tshark解码器,它以一个过滤器作为参数,但是没有办法将结果包保存到一个变量中,只能用所有结果。
有没有一种方法可以使用 scapy
从 .pcap 文件中过滤数据包并继续迭代结果?
Scapy 慢得令人难以置信,以至于交互使用是唯一的用途。它还不允许在完全(in-python)剖析之前过滤数据包,这加剧了问题。
您可以使用 libpcap
,方法是自己编写一个小的 C 扩展或使用 binding, as a replacement for PcapReader
. libpcap
allows you to specify a filter in BPF-syntax,它应用于库中的传入数据包,或者 - 当从设备 - 由内核本身。这将大大提高您的表现。
基本布局为:
open_offline()
一个 pcap 文件- 设置 BPF 过滤器
- 从 libpcap 提供的句柄读取
- 将传入的数据包数据传递给 scapy 进行进一步检查
你可以得到quite sophisticated。
您可以使用 tcpdump()
函数来应用 BPF 过滤器。
with PcapReader(tcpdump("myfile.cap", args=["-w", "-", "my BPF filter"],
getfd=True)) as pcap_reader:
for pkt in pcap_reader:
print pkt.summary()
如果您对此感兴趣,也许您可以提交功能请求,以便 PcapReader()
接受 filter
参数(并且表现或多或少类似于 sniff()
offline=
参数。