如果我生成一个没有任何上层有效负载的以太网帧,并使用sendp()在第二层发送它,那么我收到"Mac address to reach destination not found. Using broadcast."
警告,并且确实使用了ff:ff:ff:ff: ff:ff作为目标MAC地址。为什么会这样? Scapy不应该发送我构造的框架吗?
我精心制作的包装如下所示:
>>> ls(x)
dst : DestMACField = '01:00:0c:cc:cc:cc' (None)
src : SourceMACField = '00:11:22:33:44:55' (None)
type : XShortEnumField = 0 (0)
>>> sendp(x, iface="eth0")
WARNING: Mac address to reach destination not found. Using broadcast.
.
Sent 1 packets.
>>>
答案 0 :(得分:14)
大多数遇到此问题的人都错误地使用send()
(或sr()
,sr1()
,srloop()
)而非{{ 1}} (或sendp()
,srp()
,srp1()
)。对于记录,“{ - 1}}”之类的“不 - srploop()
”函数用于发送第3层数据包(p
),而“with - send()
”变量用于发送图层2个数据包(send(IP())
)。
如果您定义p
,就像我在下面这样做并使用sendp(Ether() / IP())
(而不是x
)并且您仍然遇到此问题,那么您应该尝试使用该项目的git中的最新版本存储库(见https://github.com/secdev/scapy)。
我试过了:
sendp()
同时我正在运行tcpdump:
send()