Ответ 1
Большинство людей, сталкивающихся с этой проблемой, неправильно используют send()
(или sr()
, sr1()
, srloop()
) вместо sendp()
(или srp()
, srp1()
, srploop()
). Для записи функции "без p
", такие как send()
, предназначены для отправки пакетов уровня 3 (send(IP())
), в то время как варианты "with- p
" предназначены для отправки пакетов уровня 2 (sendp(Ether() / IP())
).
Если вы определяете x
, как показано ниже, и используйте sendp()
(а не send()
), и у вас все еще есть эта проблема, вероятно, вы должны попробовать с последней версией из репозитория проекта git (см. https://github.com/secdev/scapy).
Я пробовал:
>>> x = Ether(src='01:00:0c:cc:cc:cc', dst='00:11:22:33:44:55')
>>> ls(x)
dst : DestMACField = '00:11:22:33:44:55' (None)
src : SourceMACField = '01:00:0c:cc:cc:cc' (None)
type : XShortEnumField = 0 (0)
>>> sendp(x, iface='eth0')
.
Sent 1 packets.
В то же время я запускал tcpdump:
# tcpdump -eni eth0 ether host 00:11:22:33:44:55
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:33:47.774570 01:00:0c:cc:cc:cc > 00:11:22:33:44:55, 802.3, length 14: [|llc]