【问题标题】:iterate through pcap file packet for packet using python/scapy使用 python/scapy 遍历 pcap 文件包
【发布时间】:2017-06-08 16:10:35
【问题描述】:

我想使用 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 

有人知道原因吗?

【问题讨论】:

    标签: python-2.7 scapy pcap


    【解决方案1】:

    简单尝试:

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

    【讨论】:

      猜你喜欢
      • 2018-03-10
      • 2017-08-15
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多