我希望这是微不足道的,但我无法使其正常工作。
我想在Python中使用Scapy发送伪造的ARP,但在这种情况下,我也需要欺骗源MAC地址(vmac,vip,rip都是有效值)
op = 1
who_has_router = Ether(src=vmac)/ARP(op=op,psrc=vip,pdst=rip,hwsrc=vmac)
send(who_has_router)
上面的内容在Wireshark中显示为格式错误的数据包,并且网络上的所有人都将其忽略。
如果我删除该Ether()
层,它将正常工作(但随后它不会欺骗源mac,因此在这种情况下还不够好):
# This works exactly as expected
op = 1
who_has_router = ARP(op=op,psrc=vip,pdst=rip,hwsrc=vmac)
send(who_has_router)
如何Ether()
在Python / Scapy中添加图层而又不会导致格式错误的数据包?
该send
功能用于在第3层发送数据包,而您的数据包是第2层数据包。您应该使用该sendp
功能。
有关更多信息,请参见scapy
的文档:
该
send()
功能将在第3层发送数据包。也就是说,它将为您处理路由和第2层。该sendp()
功能将在第2层起作用。由您选择正确的接口和正确的链路层协议。
在官方的API文档指出这个问题,以及:
send(pkts, inter=0, loop=0, verbose=None)
使用
conf.L3socket
超级套接字在第3层发送数据包。
sendp(pkts, inter=0, loop=0, iface=None, iface hint=None, verbose=None)
使用conf.L2socket超级套接字在第2层发送数据包。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句