Почему 14 байтов случайных данных добавляются в необработанный кадр Ethernet? - PullRequest
0 голосов
/ 21 сентября 2018

Я отправляю необработанный кадр 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 лишних байтов в этом примере?

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Нижеприведенная фиксация ядра - это то, что вызвало регрессию, о которой упоминал оригинальный постер.

Описание: package: in packet_snd начать запись при выделении канального уровня

GIT SHA: c6026847a0a1198e4d0b200da6666cb1056b12fe

https://lore.kernel.org/patchwork/patch/899678/

Существует несколько вариантов решения.

1) Понижение до 4.15.0-32-generic или до

2) Скачать исходный коддля текущего ядра, удалите этот патч и скомпилируйте его.

3) Сообщите об этом в lkml и подождите, пока они его исправят.

Вышеупомянутый патч упоминал, что он предназначен для пакетов RAWтакже, но он не проверяет размер перед добавлением дополнительных байтов, чтобы увидеть, нужно ли добавлять какие-либо байты.минимальный общий размер пакета должен составлять 64 байта.

РЕДАКТИРОВАТЬ: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/packet/af_packet.c?h=v4.19-rc5

показывает, что вышеупомянутый патч больше не в текущем ядре и kernel.org, теперь это проблема Ubuntu.

EDIT2: ubuntu 4.15.0-36.39 в дереве git больше не имеет патча, который появился в 33. поэтому ubuntu должен в какой-то момент решить эту проблему.

0 голосов
/ 28 сентября 2018

Я также видел этот 4.15.0-33-универсальный, где он впервые обнаружился.

4.15.0-32-универсальный не имеет проблемы, и это не конкретно, драйвер Ethernet, так как япопробовал usb ethernet также чтобы убедиться.

...