2015-05-01 2 views
0

Так что это мой сценарий:Как извлечь данные поставщика с использованием scapy из запроса зонда

#!/usr/bin/env python 
import sys 
from scapy.all import * 
from subprocess import * 

call(["clear"]) 

print "Probe Investigator" 
print "-----------------------------------------------------" 

intf = raw_input("Enter the Name of the interface to sniff: ") 
print ("\n") 
clients = [] 
uni = 0 
mach = [] 

def phandle(p): 
    if p.haslayer(Dot11ProbeReq): 
     mac = p.addr2 
     if p.haslayer(Dot11Elt): 
      if p.ID == 0: 
       ssid = p.info 
       if ssid not in clients and ssid != "": 
        clients.append(ssid) 
        print len(clients),mac+"--Probing-->"+ssid 
        if mac not in mach: 
         mach.append(mac) 
         global uni 
         uni+=1    
        else: 
         return 

sniff(iface=intf,prn=phandle, store=0) 
print ("\n") 
print "Unique MACs: ",uni 

Как вы можете видеть, я фильтрацию запросов зонда, а также фильтрация, чтобы увидеть, если запросы не транслируются но для конкретных SSID. Я проанализировал запросы на зонд в wireshark, чтобы увидеть, что такие зонды также имеют тег no в Dot11ELt слой, который определяет поставщика. Если я просто изменил оператор p.ID == 0 на p.ID == 221, тогда он должен технически предоставить мне информацию о продавце, но вместо этого сценарий просто зависает и никогда не продвигается вперед с остальной частью скрипта.

Как извлечь информацию о поставщике из пакета?

Моя версия питона: 2.7.3 (по умолчанию, 13 Mar 2014, 11:03:55) [GCC 4.7.2] Моя версия Linux: Дистрибьютор ID: Kali Описание: Kali GNU/Linux 1.1.0 релиз: 1.1.0 Codename: Moto Linux версия 3.18.0-kali3-amd64 GCC версии 4.7.2 Debian 4.7.2-5)) # 1 SMP Debian 3.18.6-1 ~ kali2 (2015-03-02)

ответ

1

Пакет запроса зонда может иметь несколько Dot11Elt слои и вам нужно перебирать их, пока не найдете нужный номер, а именно:

dot11elt = p.getlayer(Dot11Elt) 
while dot11elt and dot11elt.ID != 221: 
    dot11elt = dot11elt.payload.getlayer(Dot11Elt) 
if dot11elt: 
    ... # dot11elt.ID == 221: 
+0

Ok, так что я могу достичь информационного слоя сейчас, но она закодирована в том, что я, хотя был шестигранник, но это не так. Как я могу это решить? –

+0

Что вы получили и что вы ожидали получить? Как _wireshark_ анализировал точные данные? – Yoel

+0

Ну, в wirehark тег id 221 показывает яблоко или Broadcom в качестве производителя, тогда как если я посмотрю на тот же пакет в scapy dot11elt с тегом 221, или поставщик покажет мне закодированные данные. –

Смежные вопросы