在Mac中使用scapy嗅探UDP数据包



我正在尝试使用scapy嗅探功能嗅探UDP数据包,我在Looback接口发送数据包,发送代码简单如下:

from socket import *
IPv4 = "127.0.0.1"
Port = 45943
ClientSock = socket(AF_INET, SOCK_DGRAM) 
while True:
    MESSAGE = raw_input()
    ClientSock.sendto(MESSAGE, (IPv4, Port))

但是当我运行时(在导入scapy后的另一个终端选项卡中):

a = sniff(iface="lo0", count = 5)

我得到以下结果:

>>> a.nsummary()
0000 Raw
0001 Raw
0002 Raw
0003 Raw
0004 Raw

而我应该得到UDP数据包!有谁能指出我在这里遗漏了什么吗?由于

无法猜测数据链路类型(interface=lo0 linktype=0)

该消息翻译为"Scapy不理解DLT_NULL链路层报头类型,因为在*BSD和OS X的环回设备上使用,所以它不支持*BSD和OS X的环回设备"。

因此,如果您想在OS X上使用Scapy来捕获环回设备,那么您就不走运了,除非Scapy被增强以处理DLT_NULL。(DLT_NULL并不是难以处理的,所以它处理的唯一原因可能是在环回设备上使用它的大多数人都在Linux上这样做,环回设备上的链路层报头类型值是DLT_EN10MB,即以太网,所以没有人费心去修复它。我看看我是否能让它工作,如果是,给他们一个补丁。

一些建议

比起a.nsummary(),您可以使用类似

这样的命令打印出单个包的更多信息
a[1].show()
a[1].show2()
hexdump(a[1])

检查第一个数据包。2)可以强制协议解码为特定类型的数据包格式。例如,RAW_IP包捕获(链路层报头类型= 101)可以使用

强制为IPv6
conf.l2types.register(101, IPv6)

如果你想在UDP上添加一个新的层,你可以根据所使用的端口添加一个新的解析器。

最新更新