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

时间:2013-01-12 18:42:30

标签: python sockets packet-sniffers scapy

我试图使用scapy sniff函数嗅探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数据包!,任何人都可以指出我在这里缺少的任何东西。 感谢

2 个答案:

答案 0 :(得分:3)

  

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

该消息转换为“Scapy不理解DLT_NULL链路层头类型,如* BSD和OS X中的环回设备所使用的,因此它不支持* BSD和OS X上的环回设备”

如果你想在OS X上使用Scapy来捕获环回设备,那么你运气不好,除非并且直到Scapy被增强以处理DLT_NULL。 (DLT_NULL不是 难以处理的,所以大概是处理的唯一原因是大多数人在环回设备上使用它是在Linux上这样做的环回设备上的链路层头类型值是DLT_EN10MB,即以太网,所以没有人愿意解决它。我会看看我是否可以使它工作,如果是的话,给它们发送一个补丁。)

答案 1 :(得分:0)

一些建议。

您可以使用

之类的内容打印出有关各个数据包的更多信息,而不是a.nsummary()
a[1].show()
a[1].show2()
hexdump(a[1])

检查第一个数据包。 2)您可以强制协议解码为特定类型的数据包格式。例如,可以使用

强制RAW_IP数据包捕获(链路层报头类型= 101)为IPv6
conf.l2types.register(101, IPv6)

如果要在UDP之上添加新图层,可以根据使用的端口添加新的剖析器。