tcpdump не отображает RSSI

tcpdump не отображает RSSI

Я отслеживаю запросы зондирования 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на другом компьютере.
  • и т. д.

Связанный контент