Scapy - получение RSSI из пакетов WiFi

Я пытаюсь получить RSSI или уровень сигнала от пакетов WiFi. Я также хочу получить RSSI из "Запроса WiFi-запросов" (когда кто-то ищет точки доступа WiFi).

Мне удалось увидеть это из журналов Kismet, но это было только для того, чтобы убедиться, что это возможно - я не хочу использовать Kismet все время.

Для "полного сканирования" я использую scapy. Кто-нибудь знает, где я могу найти RSSI или уровень сигнала (в дБм) из пакетов, прослушиваемых scapy? Я не знаю, как построен весь пакет - и есть много "шестнадцатеричных" значений, которые я не знаю, как анализировать / интерпретировать.

Я слежу за обоими интерфейсами - wlan0 (определяет, когда кто-то подключается к моей точке доступа) и mon.wlan0 (определяет, когда кто-то ищет точки доступа). Оборудование (карта WiFi), которое я использую, основано на чипсете Prism (ISL3886). Однако тест с Kismet проводился на Atheros (AR2413) и Intel iwl4965.

Edit1:

Похоже, мне нужно как-то получить доступ к информации, хранящейся в PrismHeader: http://trac.secdev.org/scapy/browser/scapy/layers/dot11.py строка 92?

Кто-нибудь знает, как ввести эту информацию? packet.show() и packet.show2() ничего не показывают из этого класса / уровня

Edit2:

После дополнительных копаний выясняется, что интерфейс просто не настроен правильно, и поэтому он не собирает все необходимые заголовки. Если я запускаю kismet, а затем снифю пакеты с этого интерфейса с помощью scapy, в пакете будет больше информации:

###[ RadioTap dummy ]###
  version= 0
  pad= 0
  len= 26
  present= TSFT+Flags+Rate+Channel+dBm_AntSignal+Antenna+b14
  notdecoded= '8`/\x08\x00\x00\x00\x00\x10\x02\x94\t\xa0\x00\xdb\x01\x00\x00'
  ...

Теперь мне нужно только правильно настроить интерфейс без использования kismet.

6 ответов

Решение

Подвести итоги:

  • Уровень сигнала не был виден, потому что что-то не так в том, как был установлен "режим монитора" (не все заголовки были переданы / проанализированы анализаторами). Этот интерфейс монитора был создан hostapd.

  • Теперь я устанавливаю режим монитора на интерфейсе с airmon-ng - tcpdump, scapy покажет эти дополнительные заголовки.

Отредактировано: используйте scapy 2.4.1+ (или версию github dev). Самые последние версии теперь правильно декодируют "не декодированную" часть

Вот ценное расширение scapy, которое улучшает scapy.layers.dot11.PacketРазбор настоящих не декодированных полей.

https://github.com/ivanlei/airodump-iv/blob/master/airoiv/scapy_ex.py

Просто используйте:

import scapy_ex

А также:

packet.show()

Это будет выглядеть так:

###[ 802.11 RadioTap ]###
  version   = 0
  pad       = 0
  RadioTap_len= 18
  present   = Flags+Rate+Channel+dBm_AntSignal+Antenna+b14
  Flags     = 0
  Rate      = 2
  Channel   = 1
  Channel_flags= 160
  dBm_AntSignal= -87
  Antenna   = 1
  RX_Flags  = 0

По какой-то причине структура пакета изменилась. Теперь dBm_AntSignal - первый элемент в недекодированном виде.

Я не уверен на 100% в этом решении, но я использовал sig_str = -(256 - ord(packet.notdecoded[-2:-1])) чтобы достичь первого элемента, и я получаю значения, которые, кажется, dBm_AntSignal,

я использую OpenWRT в TP-Link MR3020 с extroot и Edward Keeble Passive Wifi Monitoring с некоторыми изменениями.

Я использую scapy_ex.py, и у меня была эта информация:

802.11 RadioTap

  version   = 0

  pad       = 0

  RadioTap_len= 36

  present   = dBm_AntSignal+Lock_Quality+b22+b24+b25+b26+b27+b29

  dBm_AntSignal= 32

  Lock_Quality= 8

Если у кого-то все еще есть та же самая проблема, я думаю, что нашел решение:

Я считаю, что это правильное сокращение для значения RSSI:

sig_str = -(256-ord(packet.notdecoded[-3:-2]))

и это для уровня шума:

noise_str = -(256-ord(packet.notdecoded[-2:-1]))

У меня похожая проблема, я настроил режим монитора с помощью airmon-ng и могу видеть уровень дБм в tcpdump, но всякий раз, когда я пытаюсь sig_str = -(256-ord(packet.notdecoded[-4:-3])) Я получаю -256, потому что возвращаемое значение из notdecoded в 0. Структура пакета выглядит следующим образом.

 version   = 0
 pad       = 0
 len       = 36
 present   = TSFT+Flags+Rate+Channel+dBm_AntSignal+b14+b29+Ext
 notdecoded= ' \x08\x00\x00\x00\x00\x00\x00\x1f\x02\xed\x07\x05 
 .......

Тот факт, что в нем написано "RadioTap", говорит о том, что устройство может поставлять заголовки Radiotap, а не заголовки Prism, даже если оно имеет чипсет Prism. Драйвер p54 представляется "драйвером SoftMAC", и в этом случае он, вероятно, будет предоставлять заголовки Radiotap; Вы используете драйвер p54 или более старый драйвер prism54?

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