关于monitor模式
monitor模式需要 wifi芯片本身支持,同時,驅動中存在相關接口。
? ? 先簡單說明下,在非monitor模式時,內核會將802.11幀封裝成普通網絡幀傳遞給上層;而在monitor模式時,內核會直接將802.11幀傳遞給上層,不再進行封裝,這樣用戶層通過接口就可以得到802.11的raw包了。
1.查看設備芯片
有以下幾種方法:
1)lsmod 可以看到目前使用的驅動模塊 (有些統一名稱是wlan.ko,路徑在/system/lib/modules/)
2)dmesg 查看內核啟動打印信息著,根據打印信息直接搜索內核源碼,找到相應的驅動代碼
3)?cat /sys/class/rkwifi/chip 顯示為RTL8188EU,這個是android wifi模塊中kobj的標準接口
2.查看是否支持monitor模式
? ? 在著名的aircrak-ng的官方網站上有支持的網卡列表。
????http://www.aircrack-ng.org/doku.php?id=compatibility_drivers??
? ? 另外,kismet是一款比較綜合的無線協議包解析的軟件,包括藍牙\GPS\WIFI,其中wifi部分主要在 phy_80211_dissectors.cc中PacketDot11dissector函數實現。
? ? 而
3.iwconfig
?? ? 該命令主要實現配置網卡的模式。
?????iwconfig開源源碼可以在以下網站上得到:
?http://www.labs.hpe.com/personal/Jean_Tourrilhes/Linux/Tools.html?
? ????其實現原理是借助內核底層的 ioctl:
? ? SIOCSIWMODE表明配置的是網卡的模式,而具體的配置位,在wrq中定義。
? ? 另外,ioctl的第一個形參fd是由以下調用得到,即一個AF_INET的套接字
?
4.基本原理和流程
????在內核中,hostap_80211_rx 函數是IEEE 802.11 接收無線skb的 tasklet函數,其作用是處理802.11網卡傳遞過來的數據包。
? ? 我們也可以猜想到,倘若網卡被設置成monitor模式,該函數中應當做了特別的處理。事實也正是如此:
? ? 當本地網卡設置為MONITOR時,將直接調用moitor_rx,而不進行下面的處理。
? ? 這里所述的處理,包括mac提取,包類型的判斷等等。
? ? 在monitor函數中,主要是prism2_rx_80211函數,實現將帶有802.11頭的skb直接發送給netif。所謂的netif即linux內核網絡數據包的標準框架。
? ? 這里具體代碼就不貼出來了,看起來是比較簡單易懂的。不過有一點需要補充的是,在prism2_rx_80211中,在skb中補充了一個抓包的頭,其目的是為了給用戶提供更多的包信息。
? ? 這個頭對應的數據結構為linux_wlan_ng_cap_hdr,具體聲明如下:
????? ? 顯然,這與我們用wireshark抓到的包是相吻合的。如下圖的
????
4.1 驅動更換問題
????version不匹配問題,類似以下的內核打印。
? ? 1)使用 modinfo可以看到相關的模塊信息 以及目標機的內核:
? ?這里,目標機器的gcc版本為4.4.3,編譯模塊或者應用程序的gcc需要小于該版本,否則會出現fuck的錯誤。
????2)在menuconfig中將 moudle version檢查關閉
? ? 先下載對應的內核版本(注:systemtype 選擇相應的架構就好)。修改ARCH和CROSS_COMPILE 環境變量。
? ? 另外,
? ? 去掉version support。
? ? 3)修改kernel 的 vermagic
? ? 先對比現有內核對應的宏。
????
? ? ①內核版本字符為 UTS_RELEASE "3.0.8-perf-00464-ga326fac" ? ?位置 include/linux/generated/utsrelease.h
? ? ②?去除組合 VERMAGIC_STRING 的MACRO,位置 include/linux/vermagic.h 。這里直接修改VERMAGIC_STRING ,不用管前面的一堆信息(注意每個標記后面有一個空格)
?
?
?注1:只編譯執行目錄的模塊可以使用以下方式
注2:獲取android官方內核
? ? msm是高通,包含ADP1\ADP2\Nexux One\Nexus 4的源碼。
? ? omap是德州儀器,包含了PandaBoard、Galaxy Nexus的源碼。
? ? goldfish包含了適用于模擬器平臺的源碼。
? ? tegra是英偉達系列。包含了Xoom和Nexus 7的源碼。
? ? exynos三星獵戶座芯片組。包含了Nexus 10的源碼。
?
????然后clone下切換分支(后面的數字即為kernel版本,而非android版本)。
注3:編譯文件格式,目標文件格式
? ? 其中,模塊可能沒有EABI5,需要選中內核的CONFIG_AEABI
?注4:insmod出現"no symbol version for module_layout"
? ? 這是由于內核源碼目錄沒有Module.symvers所導致的,源碼編譯下就可以了。
?注5:工具鏈可以下載谷歌官方的,也可以直接下載arm-eabi
總結
以上是生活随笔為你收集整理的关于monitor模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五分钟学Java:一篇文章带你搞懂spr
- 下一篇: 搞懂朴素贝叶斯分类算法