原址
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

该命令主要实现配置网卡的模式。

  1. iwconfig wlan0 mode Monitor​

iwconfig开源源码可以在以下网站上得到:

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

其实现原理是借助内核底层的 ioctl:

  1. ret = ioctl(skfd, SIOCSIWMODE, &wrq);

SIOCSIWMODE表明配置的是网卡的模式,而具体的配置位,在wrq中定义。

另外,ioctl的第一个形参fd是由以下调用得到,即一个AF_INET的套接字

  1. socket(AF_INET, SOCK_DGRAM, 0);

4.基本原理和流程

在内核中,hostap_80211_rx 函数是IEEE 802.11 接收无线skb的 tasklet函数,其作用是处理802.11网卡传递过来的数据包。

我们也可以猜想到,倘若网卡被设置成monitor模式,该函数中应当做了特别的处理。事实也正是如此:

  1. if (local->iw_mode == IW_MODE_MONITOR) {
  2. monitor_rx(dev, skb, rx_stats);
  3. return;
  4. }

当本地网卡设置为MONITOR时,将直接调用moitor_rx,而不进行下面的处理。

这里所述的处理,包括mac提取,包类型的判断等等。

在monitor函数中,主要是prism2_rx_80211函数,实现将带有802.11头的skb直接发送给netif。所谓的netif即linux内核网络数据包的标准框架。

这里具体代码就不贴出来了,看起来是比较简单易懂的。不过有一点需要补充的是,在prism2_rx_80211中,在skb中补充了一个抓包的头,其目的是为了给用户提供更多的包信息。

这个头对应的数据结构为linux_wlan_ng_cap_hdr,具体声明如下:

  1. struct linux_wlan_ng_cap_hdr {
  2. __be32 version;
  3. __be32 length;
  4. __be64 mactime;
  5. __be64 hosttime;
  6. __be32 phytype;
  7. __be32 channel;
  8. __be32 datarate;
  9. __be32 antenna;
  10. __be32 priority;
  11. __be32 ssi_type;
  12. __be32 ssi_signal;
  13. __be32 ssi_noise;
  14. __be32 preamble;
  15. __be32 encoding;
  16. } __packed;

显然,这与我们用wireshark抓到的包是相吻合的。如下图的

4.1 驱动更换问题

version不匹配问题,类似以下的内核打印。

  1. version magic '2.6.32.2 mod_unload modversions ARMv4 ' should be '2.6.32.2-FriendlyARM'

1)使用 modinfo可以看到相关的模块信息 以及目标机的内核:

  1. vermagic:3.0.8-perf-00464-ga326fac SMP preempt mod_unload modversions ARMv7
  2. cat /proc/version
  3. 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 环境变量。

另外,

  1. Enable loadable module support  --->
  2. [*]   Module versioning support  ​

去掉version support。

3)修改kernel 的 vermagic

先对比现有内核对应的宏。

  1. 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:只编译执行目录的模块可以使用以下方式

  1. make modules SUBDIRS=drivers/net/wireless/bcmdhd
  2. make modules SUBDIRS=drivers/net/wireless/bcm4329

注2:获取android官方内核

  1. $ git clone https://android.googlesource.com/kernel/common.git  
  2. $ git clone https://android.googlesource.com/kernel/exynos.git  
  3. $ git clone https://android.googlesource.com/kernel/goldfish.git  
  4. $ git clone https://android.googlesource.com/kernel/msm.git  
  5. $ git clone https://android.googlesource.com/kernel/omap.git  
  6. $ git clone https://android.googlesource.com/kernel/samsung.git  
  7. $ git clone https://android.googlesource.com/kernel/tegra.git  
  8. 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:编译文件格式,目标文件格式

  1. ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), BuildID[sha1]=9797a8add3ead38b191e5d7fc99150c33d5f4c7e, not stripped
  2. 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

  1. git clone https://android.googlesource.com/platform/prebuilt  ​

关于monitor模式相关推荐

  1. linux monitor模式,ubuntu14.04 安装linux-802.11n csitool Monitor模式

    参考 一.准备工作--发射器接收器都需要的操作 1. 1.sudo apt-get install gcc make linux-headers-$(uname -r) git-core 2.CSIT ...

  2. 802.11 monitor模式

    原址     monitor模式需要 wifi芯片本身支持,同时,驱动中存在相关接口. 先简单说明下,在非monitor模式时,内核会将802.11帧封装成普通网络帧传递给上层:而在monitor模式 ...

  3. 无线网卡的Master,Managed,ad-hoc,monitor模式

    无线网卡的Master,Managed,ad-hoc,monitor模式 一.AP(Access Point) 或称 Master  [ap]      这是默认情况,也是最常用的.适用于路由器作为主 ...

  4. Monitor模式和AP模式下获取WiFi的CSI信号

    目的:基于WiFi信号的呼吸和心率检测 说明: 1.自己的一点实践记录,可能有很多地方写的不好或者不对,望指正 2.获取到的CSI数据处理过程:https://blog.csdn.net/qq_203 ...

  5. linux无线网卡monitor模式,ubuntu下开启无线网卡的monitor mode

    monitor 模式是什么? 数据包通过无线电信号来传输,monitor模式下的网卡可以接收所有它可以接收的无线电信号并进行解析,不仅仅限于它所在的无线局域网. 那么ubuntu下的网卡的monito ...

  6. 从零开始的Linux 802.11WiFi CSITool(AP和monitor模式均亲测可用)

    从零开始的Linux WiFi CSITool(AP和monitor模式均亲测可用) 主要参考 1.官方资料: 2.亲测可用安装教程: 零.Linux及CSI相关知识的学习 1.Linux相关 1.1 ...

  7. 激活无线网卡至monitor模式遇到的问题

    安装完Kali Linux系统后就要投入运用,那么最首先的,也是最低级的,是要破解WEP加密,这就要用到aircrak-ng包含的组件airmon-ng,而这个组件用于改变无线网卡的工作模式,以便其他 ...

  8. linux tcpdump monitor模式 抓不到包 解决办法

    默认情况下网卡只接受发给本机的包(包括广播包),其他的报文丢弃. 混杂模式和监控模式就是接收所有经过网卡的数据包,包括不是发给本机的包. 但是监控模式与混杂模式又有一定的区别,暂不细说. 用tcpdu ...

  9. 无线网卡的Master,Managed,ad-hoc,monitor等模式

    转贴:http://sunreset.blogbus.com/logs/14257650.html 无线网卡的工作模式 无线网卡可以工作在多种模式之下.常见的有Master,Managed,ad-ho ...

  10. 查看无线网卡工作模式

    查看无线网卡工作模式 查看无线网卡工作模式,一般情况下,无线网卡有四种工作模式,分别是Managed模式.Master模式.Ad hoc模式和Monitor模式.大学霸IT达人查看无线网卡工作模式.默 ...

最新文章

  1. 异常检测算法:Isolation Forest
  2. Facebook 开源标准卷积替代方案 OctConv
  3. 代码解析深度学习系统编程模型:TensorFlow vs. CNTK
  4. Scala模式匹配:类型匹配
  5. dblink传输clob字段
  6. OnDraw与OnPaint有什么区别
  7. [原]变参函数原理详解
  8. 菜鸟裹裹电脑版_【绵阳最新转让】3500低价出售家用制氧机!东芝i5笔记本电脑、索尼微单相机、联想笔记本电脑、奶茶店、服装店转让......
  9. 【Python基础入门系列】第07天:Python 数据结构--序列
  10. linux接收数据并保存到环形缓冲区,自定义print函数缓存打印数据到环形缓冲区...
  11. [运维笔记] - (命令).Windows server常用网络相关命令
  12. JS常用函数(方法)
  13. 多线程JAVA篇(一)
  14. git使用puttygen生成公钥私钥
  15. c语言中的三角函数公式,tan三角函数公式有哪些
  16. stm32 无线打印机服务器,STM32开发的蓝牙热敏打印机
  17. 个人免签监测APP源码 短信微信支付宝 实时捕获回调收款通知!
  18. vim编辑器跳转、复制、剪切(2)
  19. 小白零基础学习Java编程好学吗?
  20. 【笔记】python中的for循环(遍历列表)、for循环中的一些缩进问题

热门文章

  1. 数据库的长连接和短链接
  2. 在vue项目中引入highcharts图表的方法
  3. matlab 菱形符号,matlab 图形符号
  4. 学生个人html静态网页制作 基于HTML+CSS+JavaScript+jquery仿苏宁易购官网商城模板
  5. 深入理解 http 反向代理(nginx)
  6. 计算机nls数据丢失损坏无法启动,电脑开机时,显示NLS数据丢失或损坏怎么处理...
  7. 上传图片显示服务器返回错误什么意思,上传图片出错时的解决步骤
  8. 用云服务器架设好服务器显示无法连接
  9. Hive Privilege 分析
  10. Forth?什么鬼?