IEEE802.11数据帧在Linux上的抓取(5)

唉,真的不明白Taiwan那些写ralink驱动的那帮家伙为何如此写驱动呢,Linux内核现成的难道不好吗?搞的不伦不类的,光那些函数变量命名就和GNU的风格不符合,也许驱动是首先在Windows上调通的吧,这样为了重用也没什么不可以,然而可苦了我们DIY一族了,当然Win粉这里不论...

可我搞不明白,为何不直接用ndiswrapper来安装Windows的驱动程序呢,而非要把Windows的驱动移植到Linux,最终不伦不类的...ndiswrapper是什么?下面简述一下。

ndiswrapper给那些不想自己编译无线网卡的家伙们带来了福音,你可以直接使用windows的二进制驱动程序(sys文件,本质上是PE格式)。这怎么可能呢,其实很简单,ndiswrapper就是为Windows驱动程序构造了一个“家园”,一个基本的运行环境,满足Windows驱动的各类调用,这个环境分为两类,第一类就是Windows的内核基本环境,第二类就是NDIS的环境,说白了就是提供一些函数并且导出即可,ndiswrapper的示意图如下:

IEEE802.11数据帧在Linux上的抓取


ndiswrapper给出了两套接口以及其Linux实现,这样Windows的PE驱动文件经过简单处理后就可以正常运行了,Windows驱动程序本身看来外部环境和Windows的一模一样,该调用的函数都有,它只管接口,并不管实现(针对接口编程!)。这个原理和Linux用户态的Wine是一样的,Wine也是提供了一个外部环境,比如诸多的dll,Wine的实现要比ndiswrapper更加复杂,因为库太多了。

如果使用ndiswrapper,怎么实现802.11的抓包呢?虽然说Wireshark的网站上的一篇WLAN (IEEE 802.11) capture setup明确提到:
Windows

Capturing WLAN traffic on Windows depends on WinPcap and on the underlying network adapters and drivers. Unfortunately,  most drivers/adapters support neither monitor mode, nor seeing 802.11 headers when capturing, nor capturing non-data  frames.

Promiscuous mode can be set; unfortunately, it's often crippled. In this mode many drivers don't supply packets at all, or don't supply packets sent by the host.

但是修改ndiswrapper还是很容易的,注意,这个NDIS并不是WIndows上的NDIS,这个NDIS只是一个接口集合,其实现还是Linux,具体怎么做,不说了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/pxgxg.html