Análise de pacotes WiFi (libpcap)

Eu tenho trabalhado em uma maneira de ter um probe de WiFi de log do roteador OpenWRT solicitado para um banco de dados MySQL (ele armazena o endereço MAC e as informações RSSI para cada pacote de solicitação de sonda junto com outros dados específicos do roteador).

Depois de pesquisar um pouco a libpcap, consegui montar um pequeno programa básico que simplesmente fareja pacotes em uma interface de monitor (mon0) usando uma expressão de filtro ('wlan subtty probe-req') e então imprime os pacotes brutos em hexadecimal. Com a informação que está disponível online na libpcap esta parte foi bastante simples.

Agora aqui é onde eu estou preso:Como faço para analisar o pacote WiFi para recuperar as informações que estou procurando (RSSI e endereço MAC de origem)?

Para ser claro, eu não estou pedindo o código para fazê-lo (embora eu não vou reclamar se você gostaria de fornecer alguns: D). Eu só estou procurando algum tipo de guia para entender qual byte é qual - um roteiro de pacotes WiFi, se você quiser.

Existem alguns bons tutoriais disponíveis para analisar os pacotes que chegam através da ethernet, mas não consegui encontrar nada para ajudar na análise de cabeçalhos especificamente relacionados ao WiFi. Eu suponho que será um processo bastante simples - apenas pegar os bytes relevantes para o RSSI e o MAC de origem - mas, novamente, não consegui encontrar nenhuma documentação sobre qual byte é qual.

Eu sei que isso foi feito antes, mas eu serei honesto: estou completamente perdido ao olhar o código-fonte para o tcpdump.

Então, alguém sabe de um bom recurso para analisar pacotes WiFi?

Felicidades

EDIT: Resposta mais específica

RSSI é encontrado no cabeçalho do RadioTap (bem, no Linux é). Puxar o RSSI do pacote é bastante simples usandoradiotap-parser.c junto com os arquivos de que depende (encontrado no mesmo diretório que o arquivo ao qual me vinculei).Se alguém estiver tendo problemas com o uso das funções radiotap-parser.c, sinta-se à vontade para entrar em contato.

Retirar o endereço MAC de origem é facilitado pelas funções radiotap porque a estrutura do cabeçalho radiotap contém o comprimento do cabeçalho do radiotap (it_len), que é variável. Desde que eu estou analisando apenas solicitações de sonda, que têm um comprimento fixo (confira página 17Aqui) é apenas uma questão de fazer um ponteiro que aponte parapacket + it_len + 10 (o endereço MAC de origem começa 10 bytes após o início do quadro MAC, que começa onde o cabeçalho do radiotap termina). Os 6 bytes que começam nesse ponteiro sãoaddr2 no quadro 802.11 (novamente, consulte a página 17Aqui).

questionAnswers(4)

yourAnswerToTheQuestion