我想使用python / scapy迭代pcap文件包。该文件有多个协议。当前迭代是特定于协议的,因此迭代产生了#34;跳跃"如果下一个数据包来自另一个协议。我现在不知道为什么会这样。无论协议是什么,我都想要数据包。
小例子:
data = 'new.pcap'
zz = rdpcap(data)
sessions = zz.sessions()
for session in sessions:
for packet in sessions[session]:
eth_src = packet[Ether].src
eth_type = packet[Ether].type
if eth_src == "00:22:97:04:06:b9" and eth_type == 0x8100:
# do anything
elif eth_src == "00:22:97:04:06:b9" and eth_type == 0x22f0:
# do anything
else:
# do anything
有谁知道原因?
答案 0 :(得分:7)
尝试简单:
for pkt in PcapReader('new.pcap'):
eth_src = pkt[Ether].src
eth_type = pkt[Ether].type
if [...]
使用rdpcap()
在内存中创建一个列表,而PcapReader()
创建一个生成器,在需要时读取数据包而不是存储在内存中(这样就可以处理大量的PCAP文件)。
如果出于某种原因需要列表,请执行以下操作:
packets = rdpcap('new.pcap')
for pkt in packets:
eth_src = pkt[Ether].src
eth_type = pkt[Ether].type
if [...]