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