2013-05-28 188 views
14

我一直在努力讓OpenWRT路由器將一個WiFi探測請求記錄到MySQL數據庫(它爲每個探測請求數據包存儲MAC地址和RSSI信息以及其他特定路由器數據)。解析WiFi數據包(libpcap)

在研究了libpcap之後,我已經能夠湊齊一個基本的小程序,它使用過濾器表達式('wlan subtype probe-req')在監視器接口(mon0)上簡單地嗅探數據包,然後打印在十六進制的原始數據包。通過libpcap上的在線信息,這部分內容非常簡單。

現在這裏是我卡住的地方:如何解析WiFi數據包以檢索我正在查找的信息(RSSI和源MAC地址)?

要說清楚,我並沒有要求代碼去做(儘管如果你想提供一些:D,我不會抱怨)。我只是在尋找一些指導,以便了解哪些字節是 - 哪些是WiFi分組路線圖,如果您願意的話。

有幾個很好的教程來解析通過以太網進入的數據包,但我一直沒有找到任何東西來幫助解析與WiFi有關的頭文件。我認爲這將是一個非常簡單的過程 - 只需獲取RSSI和源MAC的相關字節 - 但我再次無法找到哪個字節是哪個文檔。

我知道這已經做過,但我會老實說:當通過tcpdump的源代碼查看時,我完全失去了。

那麼,有沒有人知道如何解析WiFi數據包的好資源?

乾杯

編輯:更具體回答

RSSI在RadioTap頭(當然,在Linux它是)找到。使用radiotap-parser.c以及它所依賴的文件(可在與鏈接的文件相同的目錄中找到)將RSSI拉出數據包非常簡單。 如果有人在使用radiotap-parser.c函數時遇到問題,請隨時與我聯繫。

由於radiotap頭結構包含可變的無線頭標頭(it_len)的長度,所以通過無線功能塊功能可以非常輕鬆地拉出源MAC地址。由於我僅解析具有固定長度的探測請求(請查看第here),因此只需將指針指向packet + it_len + 10(源MAC地址在MAC幀開始後10個字節開始,即開始無線電廣播標頭在哪裏結束)。在該指針處開始的6個字節是802.11幀中的addr2(同樣,請參閱第17頁here)。

+0

radiotap-parser.c鏈接已損壞。 – haccks

回答

2

谷歌搜索「802.11幀格式」提供了一些有希望的鏈接,我相信。以下是一個高層概述,其中列出了數據包:http://www.technologyuk.net/telecommunications/networks/wireless_networks.shtml

+0

感謝您的鏈接,邁克,這幫助了很多。我沒有考慮在搜索字符串中使用「幀格式」,但是一旦我完成了,我的結果就變得更有用了。 –

+0

我覺得糟糕,提供Google搜索作爲答案,但我希望我的搜索條件會比以前嘗試的更有用。很高興它成功了:) –

+0

另一個鏈接是[IEEE獲取程序中的802.11頁面](http://standards.ieee.org/about/get/802/802.11.html),您可以從中檢索官方的802.11標準。 – 2013-05-29 19:35:23

-1

您可以使用模塊tshark,您可以檢索特定字段。

2

如果您使用的是pylibpcap,那麼您可以通過這種方式獲取RSSI。這是粗糙的,並對802.11幀中的標誌進行了假設(即標誌必須爲0x0000482F),但它對我很有用。這是一個python黑客,我不想沿着安裝額外模塊的路線(dpktscapy有功能做到這一點,但沒有很好的文檔),當黑客只是一個電話struct.unpack

(len,data,timestamp) = p.get_next() 

if data[0:8] =='\x00\x00\x22\x00\x2F\x48\x00\x00' and len(data) >= 50: 
    type_subtype = ord(data[34]) 
    dest_mac  = data[38:38+6] 
    src_mac  = data[44:44+6] 
    rssi,  = struct.unpack("b",data[22]) 

如果你的標誌是不是如上述,再看看在OP的問題radiotap-parser.c,並找出如何計算(在這個例子中22)的偏移量RSSI場。每個標誌位將偏移量改變1,2,4或8個字節。

1

我知道這篇文章是舊的,但我碰到它嘗試做wifi解析沒有運氣,所以我希望我可以幫助別人!

有一個相對較新的圖書館,但它的驚人的所有層次的堆棧。它被稱爲libTins,並且會爲您解析堆棧中每一層的數據包。它的BSD許可(截至2015年),並且非常容易做嗅探。它建立在lib pcap之上,但如果你想自己嗅探,它將接受字節數組。