创建格式错误的以太框架?

时间:2014-10-25 05:56:10

标签: python scapy

我希望这是微不足道的,但我无法让它发挥作用。

我想在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)

如何在不导致格式错误的数据包的情况下在Python / scapy中添加Ether()图层?

enter image description here

1 个答案:

答案 0 :(得分:3)

send函数用于在第3层发送数据包,而数据包是第2层。您应该使用sendp函数。

有关详细信息,请参阅scapy's docs

  

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层发送数据包。