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?