Я пытаюсь отправить необработанные кадры Ethernet через Wi-Fi, используя Python 2.7 (под Ubuntu).Мой код выглядит так:
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
должна представлять действительный кадр Ethernet, представляющий запрос проверки связи.Когда я запускаю этот скрипт и проверяю фрейм в 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 read .Panel ........
).
Пинг, тем не менее, действителен, поскольку я получаю ответ от своего роутера.
Это похоже на проблему с Python, а не на Wireshark,поскольку пинги, отправленные с терминала с помощью программы ping
, не содержат этих дополнительных данных.
Что происходит?