Итак, это мой сценарий:
#!/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 и увидел, что такие запросы также имеют тег № 221 на уровне Dot11ELt
, который указывает поставщика. Если я просто изменю оператор p.ID == 0
на p.ID == 221
, то технически он должен дать мне информацию о поставщике, но вместо этого сценарий просто зависнет и никогда не будет двигаться дальше с остальной частью сценария.
Как извлечь информацию о поставщике из пакета?
Моя версия Python: 2.7.3 (по умолчанию, 13 марта 2014 г., 11:03:55) [GCC 4.7.2] Моя версия Linux: ID дистрибьютора: Kali Описание: Kali GNU/Linux 1.1.0 Выпуск: 1.1.0 Кодовое имя: moto Версия Linux 3.18.0-kali3-amd64 gcc версия 4.7.2 Debian 4.7.2-5) ) #1 SMP Debian 3.18. 6-1~кали2 (2015-03-02)