我希望这是微不足道的,但我不能让它工作。
我想在Python中使用scramble发送一个伪造的阿普,但在这种情况下,我需要欺骗源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)
型
如何在Python/scrum中添加Ether()
层而不会导致格式错误的数据包?
x1c 0d1x的数据
1条答案
按热度按时间i7uq4tfw1#
send
函数用于发送第三层的数据包,而您的数据包是第二层的数据包,您应该使用sendp
函数。更多信息请参见
scapy
的文档:send()
函数将在第3层发送数据包。也就是说,它将为您处理路由和第2层。sendp()
函数将在第2层工作。由您选择正确的接口和正确的链路层协议。official API documentation也是这样说的:
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层发送数据包。