如何使用 scapy 从探测请求中提取供应商数据
How to extract vendor data using scapy from a probe request
所以这是我的脚本:
#!/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 中分析了探测请求,发现此类探测在 Dot11ELt
层中也有一个标记号 221,它指定了供应商。如果我只是将 p.ID == 0
语句更改为 p.ID == 221
那么它应该在技术上给我供应商信息,但脚本只是挂起并且永远不会继续执行脚本的其余部分。
如何从数据包中提取供应商信息?
我的 python 版本: 2.7.3(默认,2014 年 3 月 13 日,11:03:55)[GCC 4.7.2]
我的 linux 版本: 经销商 ID:Kali
Description:Kali GNU/Linux 1.1.0
Release:1.1.0
Codename:moto
Linux 版本 3.18.0-kali3-amd64
海合会版本 4.7.2
Debian 4.7.2-5) ) #1 SMP Debian 3.18.6-1~kali2 (2015-03-02)
一个探测请求数据包可能有几个 Dot11Elt
层,您需要遍历它们直到找到所需的层,如下所示:
dot11elt = p.getlayer(Dot11Elt)
while dot11elt and dot11elt.ID != 221:
dot11elt = dot11elt.payload.getlayer(Dot11Elt)
if dot11elt:
... # dot11elt.ID == 221:
所以这是我的脚本:
#!/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 中分析了探测请求,发现此类探测在 Dot11ELt
层中也有一个标记号 221,它指定了供应商。如果我只是将 p.ID == 0
语句更改为 p.ID == 221
那么它应该在技术上给我供应商信息,但脚本只是挂起并且永远不会继续执行脚本的其余部分。
如何从数据包中提取供应商信息?
我的 python 版本: 2.7.3(默认,2014 年 3 月 13 日,11:03:55)[GCC 4.7.2] 我的 linux 版本: 经销商 ID:Kali Description:Kali GNU/Linux 1.1.0 Release:1.1.0 Codename:moto Linux 版本 3.18.0-kali3-amd64 海合会版本 4.7.2 Debian 4.7.2-5) ) #1 SMP Debian 3.18.6-1~kali2 (2015-03-02)
一个探测请求数据包可能有几个 Dot11Elt
层,您需要遍历它们直到找到所需的层,如下所示:
dot11elt = p.getlayer(Dot11Elt)
while dot11elt and dot11elt.ID != 221:
dot11elt = dot11elt.payload.getlayer(Dot11Elt)
if dot11elt:
... # dot11elt.ID == 221: