Python 为什么将14字节的随机数据附加到原始以太网帧中?

Python 为什么将14字节的随机数据附加到原始以太网帧中?,python,linux,networking,ethernet,raw-ethernet,Python,Linux,Networking,Ethernet,Raw Ethernet,我使用以下python代码向环回接口(Linux ubuntu 4.15.0-34-generic)发送一个原始以太网帧: 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") (我们使用自定义以太网类型0x6666,但使用以太网II帧格式指定的数据包长度(50)具有相同的结果) 我希

我使用以下python代码向环回接口(Linux ubuntu 4.15.0-34-generic)发送一个原始以太网帧:

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")
(我们使用自定义以太网类型0x6666,但使用以太网II帧格式指定的数据包长度(50)具有相同的结果)

我希望在接收器(或Wireshark)上看到长度为14+50=64字节的数据包。相反,我看到的是一个14+50+14=78字节的数据包。添加的14个字节的内容似乎是随机的(或者可能是来自未归零的重用缓冲区的数据)

例如,以下Wireshark输出来自上述代码的两次连续调用:


0000 aa aa aa aa aa 00 ff 00 ff 00 ff 66 41………ffAA
0010 41 41 41 41 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
00204141141aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0030 41 41 41 41 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0040   00 00 00 00 00 00 10 00 00 00 00 00 00 00        ..............


0000 aa aa aa aa aa 00 ff 00 ff 00 ff 66 41………ffAA
0010 41 41 41 41 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
00204141141aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0030 41 41 41 41 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0040 22 20 68 6f 73 74 6e 61 6d 65 3d 3f 20 61“主机名=?a


我很好奇为什么要添加14个字节(因为数据包比以太网数据包所需的64个字节长,这不是一个填充问题)?在这个例子中,如何才能去掉14个额外的字节?

我也看到了4.15.0-33-generic是它第一次出现的地方

4.15.0-32-generic不存在问题,且其不明确,
自从我尝试使用usb以太网之后,以太网驱动程序也确保了这一点。

下面对内核的承诺是导致原始海报中提到的回归的原因

描述:数据包:在数据包中,在链路层分配时开始写入

吉特SHA:c6026847a0a1198e4d0b200da6666cb1056b12fe

解决方案有两种选择

1) 降级至4.15.0-32-通用或之前

2) 下载当前内核的源代码,删除该补丁并编译

3) 向lkml报告并等待他们修复

上面提到的补丁也适用于原始数据包,但在追加更多字节之前,它不会检查大小,以确定是否需要追加任何字节。数据包的最小总大小应为64字节

编辑:

显示上面的补丁已经不在当前的kernel中,kernel.org现在是ubuntu的问题


EDIT2:git树中的ubuntu 4.15.0-36.39不再具有33中显示的补丁。因此ubuntu应该在某个时候解决这个问题。

好奇的是,如果使用“*49?你还看到14个额外的字符,还是15个?是的,我忘了添加14个字节,这与负载长度无关。很高兴知道!您知道关于lkml或bug文件的任何讨论吗?非常感谢您跟踪这些细节!