我正在尝试使用Python 2.7(在Ubuntu下)通过wifi发送原始以太网帧。我的代码看起来像这样
from socket import *
data = [0x24, 0x95, 0x04, 0x8a, 0x6c, 0xd0, 0x00, 0x21, 0x6a, 0x72, 0xd4, 0x80, 0x08, 0x00, 0x45, 0x00,
0x00, 0x54, 0xe3, 0x5a, 0x40, 0x00, 0x40, 0x01, 0xd3, 0x9b, 0xc0, 0xa8, 0x01, 0x61, 0xc0, 0xa8,
0x01, 0x01, 0x08, 0x00, 0xef, 0xae, 0x0e, 0x90, 0x00, 0x01, 0x75, 0x1d, 0xca, 0x5b, 0xcb, 0x43,
0x04, 0x00, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
0x36, 0x37]
byteSequence = b"".join(map(chr, data))
s = socket(AF_PACKET, SOCK_RAW)
s.bind(("wls1", 0))
s.send(byteSequence)
变量data
应该代表表示ping请求的有效以太网帧。当我运行此脚本并检查Wireshark中的框架时,我看到了
0000 | 24 95 04 8a 6c d0 00 21 6a 72 d4 80 08 00 45 00
0010 | 00 54 e3 5a 40 00 40 01 d3 9b c0 a8 01 61 c0 a8
0020 | 01 01 08 00 ef ae 0e 90 00 01 75 1d ca 5b cb 43
0030 | 04 00 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15
0040 | 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25
0050 | 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35
0060 | 36 37 2e 50 61 6e 65 6c 00 00 00 00 00 00 83 00
如您所见,这是我要发送的数据,但是在末尾附加了14个额外的字节(转换为ASCII读取为.Panel ........
)。
但是ping似乎仍然有效,因为我收到了路由器的回复。
这似乎是Python问题,而不是Wireshark问题,因为从终端通过ping
程序发送的ping没有多余的数据。
这是怎么回事?