2015-05-01 36 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探測請求以看到,這樣的探針也有一個標籤在Dot11ELt層指定供應商沒有。如果我只是改變了p.ID == 0聲明p.ID == 221那麼就應該在技術上給我的供應商信息,而是劇本只是掛起,從來沒有與腳本的其餘部分向前移動。

我如何提取從包供應商信息?

我的Python版本: 2.7.3(默認情況下,2014年3月13日,11點03分55秒)[4.7.2 GCC] 我的Linux版本:分銷商ID:卡利 描述:卡利的GNU/Linux 1.1.0 版本:1.1.0 代號:摩托 Linux版本的 3.18.0-kali3-AMD64 gcc版本4.7.2 Debian的4.7.2-5))#1 SMP的Debian 3.18.6-1〜 kali2(2015年3月2日)

回答

1

探測請求數據包可能有幾個Dot11Elt層和需要,直到你找到需要的遍歷它們,如下所示:

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

好了,所以我現在就可以到達信息層,但它是用什麼我雖然是十六進制編碼,但事實並非如此。我將如何決定? –

+0

你得到了什麼,你期望得到什麼? _wireshark_如何解析完全相同的數據? – Yoel

+0

井Wireshark的標籤ID 221顯示蘋果或博通作爲製造商,而如果我看同樣的包在Scapy的dot11elt與標籤221或供應商給我看了編碼數據。 –

相關問題