2

我正在尝试使用 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 数据包!,任何人都可以指出我在这里遗漏的任何东西。谢谢

4

2 回答 2

4

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

该消息翻译为“Scapy 不理解 DLT_NULL 链路层标头类型,如在 *BSD 和 OS X 中的环回设备上使用的那样,因此它不支持 *BSD 和 OS X 上的环回设备”。

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

于 2013-01-13T00:54:44.363 回答
0

一些建议。

代替 a.nsummary(),您可以使用类似的东西打印出有关单个数据包的更多信息

a[1].show()
a[1].show2()
hexdump(a[1])

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

conf.l2types.register(101, IPv6)

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

于 2013-05-13T18:33:14.250 回答