为什么Scapy无法捕获VLAN标签信息?

问题描述 投票:3回答:2

我一直在用树莓派做嗅探器,并且观察到tcpdump和scapy之间有一些有趣的区别。我看到以下内容:

交通产生器机器,带箱盖的Linux Box:

sendp(Ether(dst='ff:ff:ff:ff:ff:ff',src="AA:00:00:00:00:00")/Dot1Q(vlan=10)/IP()/ICMP())

Raspberry Pi,ala'tcpdump':

00:25:10.156830 aa:00:00:00:00:00 (oui Unknown) > Broadcast, ethertype 802.1Q (0x8100),length 60: vlan 10, p 0, ethertype IPv4, localhost > localhost: ICMP echo request, id 0, seq 0, length 8

Rasperry Pi,通过'scapy':

>>> pkt[0].show()
###[ Ethernet ]###   
    dst= ff:ff:ff:ff:ff:ff   
    src= aa:00:00:00:00:00   
    type= 0x800
###[ IP ]###
       version= 4L
       ihl= 5L
       tos= 0x0
       len=28
       id= 1
       flags= 
       frag= 0L
       ttl= 64
       proto= icmp
       chksum= 0x7cde
       src= 127.0.0.1
       dst= 127.0.0.1
       \options\
###[ ICMP ]###
          type= echo-request
          code= 0
          chksum= 0xf7ff
          id= 0x0
          seq= 0x0
###[ Padding ]###
              load= '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' None

即使我尝试:

>>> Dot1Q in pkt[0]
False

有人知道为什么scapy无法捕获(解析)VLAN帧,但tcpdump认为还好吗?

((PS我也嗅探scapy,并导出了一个pcap文件,然后使用tcpdump读取该pcap文件... vlan标记消失了...消失了...]

=======================>

对于那些感兴趣的人,我现在的解决方法是使用tcpdump捕获到pcap文件,然后在scapy中使用rdpcap()加载该数据,因此我可以使用scapy强大的解析功能来探索捕获-这引入了一个缓存层,以及对我的程序的讨厌的系统调用,但为我提供了可靠的VLAN信息...

=======================>

根据RyPeck的回答和GuyHarris的建议,我现在有一个更好的解决方法:

a)使用http://sourceforge.net/projects/pylibpcap/

import pcap
conf.use_pcap=True

b)使用pcappy-可以通过以下方式安装:pip install pcappy

import pcappy as pcap
conf.use_pcap=True

现在,scapy显示与tcpdump相同的VLAN信息,并且具有完整的强大解析功能!

我一直在用树莓派做嗅探器,并且观察到tcpdump和scapy之间有一些有趣的区别。我看到以下内容:交通生成器计算机,带有鱼鳞的Linux Box:...

python networking raspberry-pi scapy
2个回答
4
投票

更新:GH2091中添加了支持,现在在Scapy 2.4.3+中可用,仅在Python 3上可用


2
投票

我试图按照您说的做,但是没有用。 'conf.L2listen'仍使用'PF_PACKETS'代替libpcap。我开始查看代码,发现仅在“ pcapdnet”模块中处理“ conf.use_pcap”。这意味着如果您不导入它,则将丢弃conf.use_pcap,而conf.L2listen仍为PF_PACKETS,而不是更改为L2pcapListenSocket(绑定到libpcap的套接字)。

© www.soinside.com 2019 - 2024. All rights reserved.