我正在使用以下 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 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 个字节长,所以不是填充问题)?在这个例子中怎么可能去掉 14 个额外的字节呢?