Как распаковать пакет wlan слоя

Итак, у меня есть текущий сырой сокет:

from socket import socket, AF_INET, SOCK_RAW, SOCK_STREAM
from struct import unpack
from binascii import hexlify

rawsocket = socket(AF_INET, SOCK_RAW)
rawsocket.bind(("192.168.2.4", 8000))

while True:
    request = rawsocket.recvfrom(2048)

    #this part is for the sake of the question
    if len(request) is not 0:
        print(request)

    request = ""

Как видите, он ожидает входящего пакета на 192.168.2.4 в порту 8000, Я могу успешно добраться до этого порта. Я посмотрел на https://docs.python.org/3.4/library/struct.html чтобы понять, как я должен понимать первый слой (wlan), но я понятия не имею, как это сделать.

Я пробовал гуглить, но не повезло, если вы знаете, как распаковать этот слой, не могли бы вы также рассказать мне, откуда вы знаете, что вы распаковываете его таким образом?

Я знаю, что должен сделать что-то вроде этого

    header = request[0][0:x] #But how for must x go for the wlan layer?
    hd = unpack("y", header) #But what fmt must y be? how do I know? 

РЕДАКТИРОВАТЬ:

я знаю это y должен начинаться с !Я тоже знаю что x должно быть общее количество байтов этого слоя: (я иду в правильном направлении)

1 ответ

Решение

Попробуй это

header = request[0][0:14]
hd = unpack("!6s6s2s", header)

dest_addr = hexlify(hd[0])
source_addr = hexlify(hd[1])
type = hexlify(hd[2])

print "destination: {0}".format(dest_addr)
print "source: {0}".format(source_addr)
print "destination: {0}".format(type)

hd должен быть списком из 3 элементов [Dest Addr, Source Addr, Type/Opcode]

Другие вопросы по тегам