2012-05-30 30 views
5

Próbuję uzyskać moc RSSI lub siłę sygnału z pakietów Wi-Fi. Chcę również RSSI z "wniosków o sondę WiFi" (gdy ktoś szuka hotspotów WiFi).Scapy - pobieranie RSSI z pakietów WiFi

Udało mi się zobaczyć to z dzienników kismetu, ale tylko po to, aby upewnić się, że jest to możliwe - nie chcę używać kismetu przez cały czas.

Dla "skanowania w pełnym wymiarze czasu" używam scapy. Czy ktokolwiek wie, gdzie mogę znaleźć sygnał RSSI lub siłę sygnału (w dBm) z pakietów sniffowanych za pomocą scapy? Nie wiem, jak zbudowany jest cały pakiet - i istnieje wiele wartości "heksadecymalnych", których nie potrafię analizować/interpretować.

Obwąchuję oba interfejsy - wlan0 (wykrywanie, gdy ktoś łączy się z moim hotspotem) i mon.wlan0 (wykrywanie, gdy ktoś szuka hotspotów). Sprzęt (karta WiFi), której używam, jest oparty na chipsecie Prism (ISL3886). Jednak test z Kismetem został przeprowadzony na Atheros (AR2413) i Intel iwl4965.

Edit1:

Wygląda na to, że potrzebują dostępu do informacji przechowywanych w jakiś sposób PrismHeader: http://trac.secdev.org/scapy/browser/scapy/layers/dot11.py linii 92?

Ktoś wie, jak wprowadzić te informacje? packet.show() i packet.show2() nie wykazują niczego z tej klasy/warstwa

Edit2:

Po więcej kopanie wydaje się, że interfejs po prostu nie jest ustawiony prawidłowo i dlatego jest nie zbiera wszystkich niezbędnych nagłówków. Jeśli biegnę Kismet a następnie powąchać pakiety z tego interfejsu z scapy jest więcej informacji w pakiecie:

###[ 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' 
    ... 

Teraz wystarczy ustawić interfejs poprawnie bez użycia Kismet.

Odpowiedz

2

Podsumowując:

  • siła sygnału nie było widać, że coś było nie tak w ten sposób, że „tryb monitora” został ustawiony (nie wszystkie nagłówki zostały przekazane/analizowany przez sniffer). Ten interfejs monitora został stworzony przez hostapd.

  • Teraz ustawiam tryb monitorowania na interfejsie z airmon-ng - tcpdump, scapy pokaż dodatkowe dodatkowe nagłówki.

+0

żadnych nowości? Czy byłeś w stanie uzyskać wartości RSSi? – alandalusi

+4

Tak, byłem. Jest "ukryty" w niezapisanej części pakietu. Wyodrębniam go: 'sig_str = - (256-ord (packet.notdecoded [-4: -3]))' – kaczor1984

+0

@ kaczor1984 Próbowałem: 'sig_str = - (256-ord (packet.notdecoded [ -4: -3])) 'i otrzymuję wartości takie jak -69, -79, -81 itd. Jak interpretujesz te wartości? – zengr

0

Fakt, że mówi „RadioTap” sugeruje, że urządzenie może dostarczać Radiotap headers, nie Prism nagłówków, mimo że ma chipset Prism. The p54 driver wydaje się być "sterownikiem SoftMAC", w takim przypadku prawdopodobnie będzie dostarczał nagłówki Radiotap; czy używasz sterownika p54 lub starszego sterownika prism54?

4

Oto cenne rozszerzenie, które usprawnia przetwarzanie scapy.layers.dot11.Packet obecnych nieodszyfrowanych pól.

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

Wystarczy użyć:

import scapy_ex 

oraz:

packet.show() 

To będzie wyglądać następująco:

###[ 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 
+1

Najlepiej sklonuj repozytorium git i uruchom 'import scapy_ex' z katalogu airoiv, ponieważ istnieją inne zależne pliki wymagane przez just scapy_ex.py (np. Printer.py). Wtedy ładnie działa. – Pierz

0

mam podobny problem, założyłem monitor mo de z airmon-ng i widzę poziom dBm w tcpdump, ale za każdym razem gdy próbuję sig_str = -(256-ord(packet.notdecoded[-4:-3])) otrzymuję -256 ponieważ zwrócona wartość z notdekodowanej w 0. Struktura pakietów wygląda następująco.

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 
....... 
1

Z jakiegoś powodu struktura pakietu uległa zmianie. Teraz dBm_AntSignal jest pierwszym elementem notdekodowanym.

Nie jestem w 100% pewien tego rozwiązania, ale użyłem sig_str = -(256 - ord(packet.notdecoded[-2:-1])), aby osiągnąć pierwszy element i otrzymuję wartości, które wydają się być dBm_AntSignal.

Używam OpenWRT w TP-Link MR3020 z programem Extroot i Edwardem Keeble Passive Wifi Monitoring z pewnymi modyfikacjami.

używam scapy_ex.py i miałem tę informację:

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