使用 python/scapy 遍历数据包的 pcap 文件数据包

iterate through pcap file packet for packet using python/scapy

我想使用 python/scapy 遍历 pcap 文件数据包。该文件有多个协议。当前的迭代是特定于协议的,因此如果下一个数据包来自另一个协议,则迭代会生成 "jump"。我不知道为什么现在会这样。我要一包一包,不管什么协议。

小例子:

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 

有谁知道原因吗?

简单尝试:

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 [...]