Тип Ethernet 0x0101 не работает с необработанным сокетом - PullRequest
0 голосов
/ 04 июля 2018

Я попытался отправить необработанный пакет с типом Ethernet 0x0101, но, похоже, он не работает, если я использую тип Ethernet 0x1000, он работает правильно. В основном я открываю необработанный сокет:

int sd = socket(AF_PACKET, SOCK_RAW | SOCK_CLOEXEC, htons(0x0101));
int r = sendmsg(sd, msgSend, 0);

соответственно с iana типа ethernet 0101-01FF являются экспериментальными, поэтому, насколько я понимаю, можно использовать для экспериментов.

Если я использую 0x0101, tcpdump показывает:

00:00:01.001914 aa:00:00:2e:00:02 > 08:00:27:0b:ed:84, 802.3, length 257: LLC, dsap Null (0x00) Individual, ssap Null (0x00) Command, ctrl 0x0000: Information, send s0
        0x0000:  0000 0000 efbe adde aaaa db00 0000 0000  ................                                                                                              
        0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................                                                                                              
        0x0020:  0000 0000 0000 0000 0000 0000 0000 0000  ................                                                                                              
        0x0030:  0000

в то время как при использовании 0x1000 отображается:

00:00:00.439876 aa:00:00:2e:00:02 > 08:00:27:0b:ed:84, ethertype Trail (0x1000), length 64:                                                                            
        0x0000:  0000 0000 efbe adde aaaa db00 0000 0000  ................                                                                                              
        0x0010:  0000 0000 0000 0000 0000 0000 0000 0000  ................                                                                                              
        0x0020:  0000 0000 0000 0000 0000 0000 0000 0000  ................                                                                                              
        0x0030:  0000 

Чего мне не хватает?

1 Ответ

0 голосов
/ 04 июля 2018

Tcpdump интерпретирует значение 0x0101 в этой позиции как Длина кадра Ethernet .

Предполагается, что значения меньше 0x600 (десятичное 1536) будут длиной кадра (проанализированной как Frametype IEEE 802.2 LLC) вместо следующего идентификатора протокола (проанализированного как Frametype Ethernet II).

Здесь вы видите, что tcpdump действительно интерпретирует 0x101 (257 десятичных) как длину:

00: 00: 01.001914 аа: 00: 00: 2e: 00: 02> 08: 00: 27: 0b: ред .: 84, 802.3, длина 257 : LLC, dsap Null (0x00) Индивидуальная команда ssap Null (0x00), ctrl 0x0000: информация, отправка s0

Но ваша рамка должна быть правильно подключена, как вы и предполагали.

...