Scapy ICMPv6EchoRequest从Scapy命令提示符发送但不是从脚本中发送?

时间:2013-10-22 00:04:05

标签: python echo ping scapy

我正在尝试从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机器,尝试的Receiver是桥接网络适配器上的Macbook。

1 个答案:

答案 0 :(得分:1)

在Scapy中,当您使用/运算符时,左侧的操作数将操作数封装或放置在右侧作为数据或底层。这是数据包中的下一步。

你的问题是你的发送线 -

send(request/ip)

你让他们逆转了。这将生成一个数据包,其中IP层是ICMPv6层的数据。这就是为什么你收到错误WARNING: No IPv6 underlayer to compute checksum. Leaving null,,因为你实际上并没有放任何东西,因为你的图层顺序错误。

这就是你的意思。

send(ip/request)

更改一个发送行,您应该会看到预期的结果。