创建格式错误的以太帧?

问题描述 投票:0回答:1

我希望这很简单,但我无法让它发挥作用。

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

python scapy
1个回答
5
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.