Я отправляю необработанный кадр Ethernet на интерфейс обратной связи (Linux Ubuntu 4.15.0-34-generic) со следующим кодом Python:
from scapy.all import *
pkt = Ether(dst="aa:aa:aa:aa:aa:aa", src="00:ff:00:ff:00:ff", type=0x6666) / ("A"*50)
sendp(pkt, iface="lo")
(Мы используем пользовательский тип Ethernet 0x6666,но использование длины пакета (50), как указано в формате кадра Ethernet II, имеет тот же результат)
Я бы ожидал увидеть пакет длиной 14 + 50 = 64 байта на приемнике (или в Wireshark),Вместо этого я вижу пакет размером 14 + 50 + 14 = 78 байт.Содержимое добавленных 14 байтов является, по-видимому, случайным (или вероятными данными из повторно использованного буфера, который не был обнулен).
В качестве примера, следующие выходные данные Wireshark получены из двух последовательных вызовов приведенного выше кода:
0000 aa aa aa aa aa aa 00 ff 00 ff 00 ff 66 66 41 41 ............ffAA
0010 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0020 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0030 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0040 00 00 00 00 00 00 10 00 00 00 00 00 00 00 ..............
0000 aa aa aa aa aa aa 00 ff 00 ff 00 ff 66 66 41 41 ............ffAA
0010 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0020 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0030 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
0040 22 20 68 6f 73 74 6e 61 6d 65 3d 3f 20 61 " hostname=? a
Мне любопытно, почему добавляются 14 байтов (поскольку пакет длиннее требуемых 64 байтов для пакета Ethernet, это невопрос заполнения)?И как можно избавиться от 14 лишних байтов в этом примере?