2

我正在尝试从 python 脚本中发送 ICMPv6 Echo 请求。当我在 Scapy 环境中执行此过程时,它可以完美运行。我可以在 Wireshark 中看到数据包交换。但是,当我有这段代码时:

#Spacy commands
ip = IPv6()
ip.dst = "fe80::ba8d:12ff:fe42:98c8"
ip.show()
print'-----------------------------------------'
request = ICMPv6EchoRequest()
request.id=98
request.show()
print'-----------------------------------------\n'

send(request/ip) #send Echo Request w/ IPv6 Header

在我的 python 脚本中,然后调用脚本,我得到了这个:

WARNING: Mac address to reach destination not found. Using broadcast.
WARNING: No IPv6 underlayer to compute checksum. Leaving null.
.
Sent 1 packets.

但实际上没有发送任何数据包......有人知道我做错了什么吗?

编辑:我应该提到发送节点是虚拟 Ubuntu Linux 机器,而尝试的接收器是桥接网络适配器上的 Macbook。

4

1 回答 1

2

在 Scapy 中,当您使用/运算符时,左侧的操作数封装或放置右侧的操作数作为数据或底层。这是数据包中接下来会出现的内容。

你的问题是你的发送线路 -

send(request/ip)

你把它们颠倒了。这会产生一个数据包,其中 IP 层是 ICMPv6 层的数据。这就是为什么您会收到错误的WARNING: No IPv6 underlayer to compute checksum. Leaving null,原因,因为您实际上并没有在其中放置任何东西,因为您的图层顺序错误。

这就是你想要做的。

send(ip/request)

更改那条发送线路,您应该会看到预期的结果。

于 2013-10-22T20:16:03.820 回答