我正在尝试从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。
答案 0 :(得分:1)
在Scapy中,当您使用/
运算符时,左侧的操作数将操作数封装或放置在右侧作为数据或底层。这是数据包中的下一步。
你的问题是你的发送线 -
send(request/ip)
你让他们逆转了。这将生成一个数据包,其中IP层是ICMPv6层的数据。这就是为什么你收到错误WARNING: No IPv6 underlayer to compute checksum. Leaving null,
,因为你实际上并没有放任何东西,因为你的图层顺序错误。
这就是你的意思。
send(ip/request)
更改一个发送行,您应该会看到预期的结果。