我一直在用树莓派做嗅探器,并且观察到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:...
更新:GH2091中添加了支持,现在在Scapy 2.4.3+中可用,仅在Python 3上可用
我试图按照您说的做,但是没有用。 'conf.L2listen'仍使用'PF_PACKETS'代替libpcap。我开始查看代码,发现仅在“ pcapdnet”模块中处理“ conf.use_pcap”。这意味着如果您不导入它,则将丢弃conf.use_pcap,而conf.L2listen仍为PF_PACKETS,而不是更改为L2pcapListenSocket(绑定到libpcap的套接字)。