C 以太网类型0x0101不适用于原始套接字
我试图发送一个以太网类型为0x0101的原始数据包,但它似乎不工作,如果我使用以太网类型0x1000,它工作正常。 基本上,我打开一个原始套接字:C 以太网类型0x0101不适用于原始套接字,c,linux,sockets,raw-ethernet,C,Linux,Sockets,Raw Ethernet,我试图发送一个以太网类型为0x0101的原始数据包,但它似乎不工作,如果我使用以太网类型0x1000,它工作正常。 基本上,我打开一个原始套接字: int sd = socket(AF_PACKET, SOCK_RAW | SOCK_CLOEXEC, htons(0x0101)); int r = sendmsg(sd, msgSend, 0); 因此与以太网类型0101-01FF是实验性的,所以我的理解可以用于实验 如果使用0x0101 tcpdump,则显示: 00:00:01.00191
int sd = socket(AF_PACKET, SOCK_RAW | SOCK_CLOEXEC, htons(0x0101));
int r = sendmsg(sd, msgSend, 0);
因此与以太网类型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
我遗漏了什么?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:84802.3,长度257:LLC,dsap Null(0x00)个人,ssap Null(0x00)命令,ctrl 0x0000:信息,发送s0
但你们的框架应该按照你们的预期正确地安装在电线上