Я отслеживаю запросы зондирования Wi-Fi через tcpdump на Debian и пытаюсь захватить RSSI (силу сигнала) каждого элемента запроса зондирования. В настоящее время вывод tcpdump для каждого запроса зондирования выглядит следующим образом:
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]
Отсутствует уровень сигнала и некоторые другие элементы.
Используя другую машину с той же версией tcpdump/libpcap и теми же аргументами для tcpdump, вывод включает уровень сигнала (показано ниже)
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]
Может ли кто-нибудь объяснить, почему RSSI отсутствует в полезных данных на первом устройстве, и есть ли способ его получить?
По просьбе @Spiff, вот шестнадцатеричный дамп одного из захваченных пакетов.
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
решение1
[Обновлено со всеми выводами по устранению неполадок.
Благодарим выдающегося разработчика tcpdump/libpcap/Wireshark Гая Харриса.]
tcpdump
понимает только формат заголовка радиометаданных "Radiotap" (он же LINKTYPE_IEEE802_11_RADIOTAP
, он же ) типа канала передачи данных для режима мониторинга 802.11.DLT_IEEE802_11_RADIO
DLT IEEE802_11_RADIO
сообщает карте/драйверу о необходимости добавлять к каждому полученному кадру дополнительный «поддельный» заголовок, полный метаданных радио. Это то, что не передавалось в виде битов в эфире, а вместо этого считывалось из состояния радио в момент получения кадра. Эта информация включает RSSI, канал, на который было настроено радио, скорость передачи данных/MCS пакета и, возможно, многое другое.
Если ваша карта и драйвер поддерживают Radiotap, вы можете указать, что хотите захватывать в этом режиме, добавив -y IEEE802_11_RADIO
к своим tcpdump
аргументам. Вы можете получить список поддерживаемых типов каналов передачи данных для вашего ra0
интерфейса с помощью tcpdump -i ra0 -IL
или, возможно, с помощью tcpdump -i ra0 -D
. Обратите внимание, что DLT режима мониторинга могут не отображаться, если вы не включите , -I
чтобы указать режим мониторинга. Обратите внимание также, что добавление -I
для перевода интерфейса в режим мониторинга может работать не во всех системах, поэтому вам может потребоваться использовать скрипт airmon-ng
в aircrack-ng
пакете программного обеспечения с открытым исходным кодом, чтобы включить режим мониторинга.
Похоже, что драйвер/чипсет Ralink на нерабочей машине не поддерживает заголовки Radiotap. По-видимому, он поддерживает только устаревший формат заголовков Prism и менее известный вариант заголовков Prism.
Вы можете подтвердить эту теорию, проверив DLT интерфейса на рабочей машине (в режиме монитора) с помощью команд, указанных выше, и убедившись, что это IEEE802_11_RADIO
.
Если это подтвердится, то ваши варианты сводятся к следующему:
- Обновите драйвер на нерабочей машине, чтобы он соответствовал драйверу на рабочей машине. По-видимому, драйвер на рабочей машине поддерживает заголовки Radiotap. Поскольку вы говорите, что обе машины имеют одинаковую модель USB Wi-Fi-адаптера, надеюсь, что оба адаптера действительно имеют одинаковый набор микросхем Wi-Fi внутри, поэтому лучший драйвер будет работать.
- Используйте Wireshark (или включенный инструмент командной строки
tshark
) для захвата пакетов в режиме монитора на машине с проблемой. Wireshark и tshark должны знать, как анализировать варианты заголовков Prism, которые поддерживает «плохой» драйвер. - Захватите заголовки канального уровня
tcpdump
и проанализируйте RSSI варианта заголовка Prism самостоятельно. Скорее всего, это будет little-endian SInt32 со смещением 0x44 (десятичное 68). Было бы надежнее найти последовательность4400 0400 0000 0400
, а затем взять следующие 4 байта и считать их SInt32. В вашем примере захваченного заголовка значение RSSI выглядит так:b1ff ffff
. Это будет0xffffffb1
, что является 32-битным представлением целого числа со знаком в формате дополнения до двух -79, что является допустимым RSSI для слабого, но все еще работоспособного уровня сигнала. - Используйте
tcpdump
для записи данных в файл на проблемном компьютере, а затем проанализируйте их с помощью Wireshark илиtshark
на другом компьютере. - и т. д.