Estou monitorando solicitações de sondagem Wi-Fi via tcpdump no Debian e tentando capturar o RSSI (intensidade do sinal) de cada elemento de solicitação de sondagem. Atualmente, a saída do tcpdump para cada solicitação de investigação é semelhante a esta:
09:13:17.663057 BSSID:Broadcast DA:Broadcast SA:04:fe:31:67:32:a0 (oui Unknown) Probe Request () [1.0 2.0 5.5 11.0 Mbit]
Falta a intensidade do sinal e alguns outros elementos.
Usando outra máquina com a mesma versão do tcpdump/libpcap e os mesmos argumentos do tcpdump, a saída inclui a intensidade do sinal (mostrado abaixo)
09:14:51.673753 6.0 Mb/s 2412 MHz 11g -71dB signal antenna 1 BSSID:Broadcast DA:Broadcast SA:b2:b2:b2:b2:b2:b2 (oui Unknown) Probe Request (11n-AP) [1.0* 2.0* 5.5* 11.0* 9.0 18.0 36.0 54.0 Mbit]
Alguém pode explicar por que o RSSI está faltando na carga de dados no primeiro dispositivo e há alguma maneira de capturá-lo?
Por solicitação do @Spiff, aqui está um despejo hexadecimal de uma das capturas de pacotes.
12:44:40.226564 BSSID:Broadcast DA:Broadcast SA:00:1e:8f:93:3f:60 (oui Unknown) Probe Request (pagefarm) [1.0 2.0 5.5 11.0 6.0 9.0 12.0 18.0 Mbit]
0x0000: 4400 0000 9000 0000 7261 3000 0000 0000 D.......ra0.....
0x0010: 0000 0000 0000 0000 4400 0100 0000 0400 ........D.......
0x0020: c79d 0300 4400 0200 0000 0000 0000 0000 ....D...........
0x0030: 4400 0300 0000 0400 0300 0000 4400 0400 D...........D...
0x0040: 0000 0400 b1ff ffff 0000 0000 0000 0000 ................
0x0050: 0000 0000 4400 0600 0000 0400 0000 0000 ....D...........
0x0060: 4400 0700 0000 0400 0000 0000 4400 0800 D...........D...
0x0070: 0000 0400 0200 0000 4400 0900 0000 0000 ........D.......
0x0080: 0000 0000 4400 0a00 0000 0400 3500 0000 ....D.......5...
0x0090: 4000 0000 ffff ffff ffff 001e 8f93 3f60 @.............?`
0x00a0: ffff ffff ffff 4022 0008 7061 6765 6661 ......@"..pagefa
0x00b0: 726d 0108 0204 0b16 0c12 1824 0301 0332 rm.........$...2
0x00c0: 0430 4860 6c .0H`l
Responder1
[Atualizado com todas as descobertas da nossa solução de problemas.
Agradecimentos ao extraordinário mantenedor do tcpdump/libpcap/Wireshark, Guy Harris.]
tcpdump
entende apenas o tipo de link de dados de formato de cabeçalho de metadados de rádio "Radiotap" (também conhecido como LINKTYPE_IEEE802_11_RADIOTAP
, também conhecido como ) para o modo de monitor 802.11.DLT_IEEE802_11_RADIO
O IEEE802_11_RADIO
DLT diz ao cartão/driver para anexar cada quadro recebido com um cabeçalho "falso" extra cheio de metadados de rádio. Isso é algo que não foi transmitido como bits no ar, mas sim lido do estado do rádio no momento em que recebeu o quadro. Essas informações incluem o RSSI, o canal em que o rádio foi sintonizado, a taxa de dados/MCS do pacote e possivelmente muito mais.
Se a sua placa e driver suportam Radiotap, você pode especificar que deseja capturar neste modo adicionando -y IEEE802_11_RADIO
aos seus tcpdump
argumentos. Você pode obter uma lista de tipos de links de dados suportados para sua ra0
interface com tcpdump -i ra0 -IL
ou possivelmente com tcpdump -i ra0 -D
. Observe que os DLTs do modo monitor podem não aparecer se você não incluir o -I
para especificar o modo monitor. Observe também que adicionar -I
para colocar a interface no modo monitor pode não funcionar em todos os sistemas, portanto, pode ser necessário usar o airmon-ng
script no aircrack-ng
pacote de software de código aberto para ativar o modo monitor.
Parece que o driver/chipset Ralink na máquina que não funciona não suporta cabeçalhos Radiotap. Aparentemente, ele suporta apenas o obsoleto formato de cabeçalho Prism e uma variante menos conhecida de cabeçalhos Prism.
Você pode confirmar essa teoria verificando o DLT da interface na máquina em funcionamento (quando no modo monitor) usando os comandos acima e confirmando se é IEEE802_11_RADIO
.
Se confirmado, isso significa que suas opções se resumem a coisas como:
- Atualize o driver em sua máquina que não está funcionando para que ele corresponda ao driver em sua máquina em funcionamento. Aparentemente, o driver na máquina em funcionamento suporta cabeçalhos Radiotap. Como você diz que ambas as máquinas têm o mesmo modelo de adaptador USB Wi-Fi, espero que ambos os adaptadores realmente tenham o mesmo chipset Wi-Fi interno, para que o melhor driver funcione.
- Use o Wireshark (ou a ferramenta de linha de comando incluída
tshark
) para fazer capturas de pacotes no modo monitor na máquina com o problema. Wireshark e tshark devem saber como analisar os cabeçalhos variantes do Prism que o driver "ruim" suporta. - Capture os cabeçalhos da camada de link
tcpdump
e analise você mesmo o RSSI da variante do cabeçalho Prism. Provavelmente será o little-endian SInt32 no deslocamento 0x44 (decimal 68). Seria mais confiável procurar a sequência4400 0400 0000 0400
e então pegar os próximos 4 bytes e considerá-los um SInt32. No seu exemplo de cabeçalho capturado, o valor RSSI se parece com:b1ff ffff
. Isso seria0xffffffb1
, que é a representação inteira com sinal de complemento de dois de 32 bits de -79, que é um RSSI válido para uma intensidade de sinal ruim, mas ainda funcional. - Use
tcpdump
para capturar um arquivo na máquina com problema, mas analise-os posteriormente usando o Wireshark outshark
em outra máquina. - etc.