以太网类型0x0101不适用于原始套接字

时间:2018-07-04 14:43:55

标签: c linux sockets raw-ethernet

我尝试发送以太网类型为0x0101的原始数据包,但似乎无法正常工作,如果我使用以太网类型0x1000,则它可以正常工作。 基本上我打开一个原始套接字:

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

根据iana以太网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 :(得分:3)

Tcpdump将此位置的值0x0101解释为以太网帧长度

假定小于0x600(十进制1536)的值是帧长度(解析为IEEE 802.2 LLC型帧),而不是下一个协议id(解析为Ethernet II型帧)。

在这里,您看到tcpdump确实将0x101(十进制的257)解释为长度:

00:00:01.001914 aa:00:00:2e:00:02> 08:00:27:0b:ed:84,802.3, length 257 :LLC,dsap Null(0x00 )个人,ssap Null(0x00)命令,Ctrl 0x0000:信息,发送s0

但是您的框架应该按照您的预期正确地布线。