使用python/scapy迭代pcap文件包

cra*_*idy 5 scapy pcap python-2.7

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

小例子:

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 
Run Code Online (Sandbox Code Playgroud)

有谁知道原因?

Pie*_*rre 7

试试简单:

for pkt in PcapReader('new.pcap'):
    eth_src = pkt[Ether].src 
    eth_type = pkt[Ether].type
    if [...]
Run Code Online (Sandbox Code Playgroud)

使用rdpcap()在内存中创建一个列表,同时PcapReader()创建一个生成器,在需要时读取数据包而不是存储在内存中(这样可以处理大量的PCAP文件).

如果由于某种原因需要列表,请执行以下操作:

packets = rdpcap('new.pcap')
for pkt in packets:
    eth_src = pkt[Ether].src 
    eth_type = pkt[Ether].type
    if [...]
Run Code Online (Sandbox Code Playgroud)