日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于monitor模式

發布時間:2023/12/18 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于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?wlan0?mode?Monitor?
  • ?????iwconfig開源源碼可以在以下網站上得到:

    ?http://www.labs.hpe.com/personal/Jean_Tourrilhes/Linux/Tools.html?

    ? ????其實現原理是借助內核底層的 ioctl:

  • ?ret?=?ioctl(skfd,?SIOCSIWMODE,?&wrq);
  • ? ? SIOCSIWMODE表明配置的是網卡的模式,而具體的配置位,在wrq中定義。

    ? ? 另外,ioctl的第一個形參fd是由以下調用得到,即一個AF_INET的套接字

  • socket(AF_INET,?SOCK_DGRAM,?0);
  • ?

    4.基本原理和流程

    ????在內核中,hostap_80211_rx 函數是IEEE 802.11 接收無線skb的 tasklet函數,其作用是處理802.11網卡傳遞過來的數據包。

    ? ? 我們也可以猜想到,倘若網卡被設置成monitor模式,該函數中應當做了特別的處理。事實也正是如此:

  • if?(local->iw_mode?==?IW_MODE_MONITOR)?{
  • monitor_rx(dev,?skb,?rx_stats);
  • return;
  • }????
  • ? ? 當本地網卡設置為MONITOR時,將直接調用moitor_rx,而不進行下面的處理。

    ? ? 這里所述的處理,包括mac提取,包類型的判斷等等。

    ? ? 在monitor函數中,主要是prism2_rx_80211函數,實現將帶有802.11頭的skb直接發送給netif。所謂的netif即linux內核網絡數據包的標準框架。

    ? ? 這里具體代碼就不貼出來了,看起來是比較簡單易懂的。不過有一點需要補充的是,在prism2_rx_80211中,在skb中補充了一個抓包的頭,其目的是為了給用戶提供更多的包信息。

    ? ? 這個頭對應的數據結構為linux_wlan_ng_cap_hdr,具體聲明如下:

  • struct?linux_wlan_ng_cap_hdr?{
  • __be32?version;
  • __be32?length;
  • __be64?mactime;
  • __be64?hosttime;
  • __be32?phytype;
  • __be32?channel;
  • __be32?datarate;
  • __be32?antenna;
  • __be32?priority;
  • __be32?ssi_type;
  • __be32?ssi_signal;
  • __be32?ssi_noise;
  • __be32?preamble;
  • __be32?encoding;
  • }?__packed;
  • ????? ? 顯然,這與我們用wireshark抓到的包是相吻合的。如下圖的

    ????

    4.1 驅動更換問題

    ????version不匹配問題,類似以下的內核打印。

  • version?magic?'2.6.32.2?mod_unload?modversions?ARMv4?'?should?be?'2.6.32.2-FriendlyARM'????????
  • ? ? 1)使用 modinfo可以看到相關的模塊信息 以及目標機的內核:

  • vermagic:3.0.8-perf-00464-ga326fac?SMP?preempt?mod_unload?modversions?ARMv7
  • cat?/proc/version
  • Linux?version?3.0.8-perf-00464-ga326fac?(builder@taishan)?(gcc?version?4.4.3?(GCC)?)?#1?SMP?PREEMPT?Tue?Jan?8?11:46:49?CST?2013
  • ? ?這里,目標機器的gcc版本為4.4.3,編譯模塊或者應用程序的gcc需要小于該版本,否則會出現fuck的錯誤。

    ????2)在menuconfig中將 moudle version檢查關閉

    ? ? 先下載對應的內核版本(注:systemtype 選擇相應的架構就好)。修改ARCH和CROSS_COMPILE 環境變量。

    ? ? 另外,

  • ?????Enable?loadable?module?support??--->
  • ?????????????????????????????????????????[*]???Module?versioning?support???
  • ? ? 去掉version support。

    ? ? 3)修改kernel 的 vermagic

    ? ? 先對比現有內核對應的宏。

  • vermagic:???????2.6.39+?mod_unload?ARMv5?
  • ????

    ? ? ①內核版本字符為 UTS_RELEASE "3.0.8-perf-00464-ga326fac" ? ?位置 include/linux/generated/utsrelease.h

    ? ? ②?去除組合 VERMAGIC_STRING 的MACRO,位置 include/linux/vermagic.h 。這里直接修改VERMAGIC_STRING ,不用管前面的一堆信息(注意每個標記后面有一個空格)

    ?

    ?

    ?注1:只編譯執行目錄的模塊可以使用以下方式

  • make?modules?SUBDIRS=drivers/net/wireless/bcmdhd
  • make?modules?SUBDIRS=drivers/net/wireless/bcm4329
  • 注2:獲取android官方內核

  • $?git?clone?https://android.googlesource.com/kernel/common.git??
  • $?git?clone?https://android.googlesource.com/kernel/exynos.git??
  • $?git?clone?https://android.googlesource.com/kernel/goldfish.git??
  • $?git?clone?https://android.googlesource.com/kernel/msm.git??
  • $?git?clone?https://android.googlesource.com/kernel/omap.git??
  • $?git?clone?https://android.googlesource.com/kernel/samsung.git??
  • $?git?clone?https://android.googlesource.com/kernel/tegra.git??
  • git?branch?-a
  • ? ? msm是高通,包含ADP1\ADP2\Nexux One\Nexus 4的源碼。

    ? ? omap是德州儀器,包含了PandaBoard、Galaxy Nexus的源碼。

    ? ? goldfish包含了適用于模擬器平臺的源碼。

    ? ? tegra是英偉達系列。包含了Xoom和Nexus 7的源碼。

    ? ? exynos三星獵戶座芯片組。包含了Nexus 10的源碼。

    ?

    ????然后clone下切換分支(后面的數字即為kernel版本,而非android版本)。

    注3:編譯文件格式,目標文件格式

  • ELF?32-bit?LSB?relocatable,?ARM,?EABI5?version?1?(SYSV),?BuildID[sha1]=9797a8add3ead38b191e5d7fc99150c33d5f4c7e,?not?stripped
  • ?
  • ELF?32-bit?LSB?relocatable,?ARM,?version?1,?BuildID[sha1]=750621f8c1cc6e748f78527f1dbdaecac31087e0,?not?stripped
  • ? ? 其中,模塊可能沒有EABI5,需要選中內核的CONFIG_AEABI

    ?注4:insmod出現"no symbol version for module_layout"

    ? ? 這是由于內核源碼目錄沒有Module.symvers所導致的,源碼編譯下就可以了。

    ?注5:工具鏈可以下載谷歌官方的,也可以直接下載arm-eabi

  • git?clone?https://android.googlesource.com/platform/prebuilt???
  • 總結

    以上是生活随笔為你收集整理的关于monitor模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。