在实际抓取空中包的过程中,对应网卡的windows驱动往往不支持抓包(或者只能购买购物网站上的性能不大行的所谓windows专用抓包工具,其实这从底层上看是不合理的,就算找客服问,他们往往也无法准确回答),而这种抓包的方式在linux系统上更容易开发(甚至原生就支持),也更容易使用,所以本文介绍如何通过ubuntu系统抓包。

一、使用设备
mtk usb网卡(也可以是rtk、bcm、qcom、intel等厂商的网卡,因为目前本人只有这个,所以以mtk为例),windows电脑
在这里插入图片描述

二、将网卡插入电脑
在这里插入图片描述
这个就是插入的usb网卡,这里之所以没有显示具体的设备名,是因为本人没有安装它的windows驱动,不过这无伤大雅,因为本来就不需要。

三、usb网卡连接虚拟机
首先,usb设置这里选择usb3.1(具体看你自己的usb网卡是2.0还是3.1,本人的是蓝色usb3.1),否则linux无法正确识别此网卡
在这里插入图片描述

其次,按照下图顺序将usb网卡连接到虚拟机
在这里插入图片描述

这样子工具栏就会出现可选的无线选项,这里记得点击关闭,因为抓取空中包时不能开启正常无线功能
在这里插入图片描述

接着在命令行执行下lsmod,如下几个即为对应此usb网卡的驱动,这里在usb网卡正确连接到ubuntu上时已经自动加载好了(若没有自动加载,要么是usb网卡没有被正确识别,要么是网卡损坏,要么是没有现成的对应驱动,要么是ubuntu不能通过这设备的ID号识别到对应的模组,基本上逃不了这些情况,查找对应的教程基本上可以解决)。这些驱动也可以自己手动加载,有兴趣的可以自己查找对应教程。
在这里插入图片描述

输入ifconfig -a,如下所示的这张新增网卡即为对应的usb网卡
在这里插入图片描述

接着执行下ps -ef | grep wpa,如下:
在这里插入图片描述
此处的wpa_supplicant对应着无线的wifi正常功能系统应用,抓空中包时是不需要的,把它kill掉,否则抓取空中包很可能会失败。

四、正式开始抓取空中包
经过前面的步骤,抓包的准备工作已经做好了,现在正式开始抓包。
1、输入iw phy,找到usb网卡所属的phy,如下,本人的是phy1
在这里插入图片描述
2、输入sudo iw phy phy1 interface add wlmon type monitor(phy1就是前面输入iw phy看到的phy,是可变的),再输入ifconfig -a,看到新增一张wlmon,这就是即将用来抓包的网卡接口。
在这里插入图片描述
输入iwconfig可以看到此网卡已经处于monitor模式
在这里插入图片描述
3、接着输入sudo ifconfig wlmon up提示如下
在这里插入图片描述
很显然是rfkill限制了操作

4、解除rfkill block
输入rfkill list,可以看到这网卡被block了,
在这里插入图片描述
根据左边的rkill序号是1,输入rfkill unblock 1,再执行rfkill list,可以看到block被解除了
在这里插入图片描述

5、再次输入sudo ifconfig wlmon up,可以看到成功执行。
6、设置抓包信道和频宽
以44信道80MHz频宽为例,输入sudo iw dev wlmon set channel 44 80MHz(这是一个通过netlink下发的命令,对应的还有ioctl的命令,具体用什么需要根据具体驱动选择)

7、输入sudo tcpdump -i wlmon -w /home/tcpdump.pcap抓取空中包
在这里插入图片描述
8、将这个tcpdump.pcap复制到主机电脑上,用wireshark打开,看到如下这些数据包的信息,这就是抓取的44信道空中包
在这里插入图片描述
五、额外信息
1、一般情况下,一个ubuntu的linux系统具有市面上卖的大多数无线网卡的对应驱动,只不过需要注意的是,并不是全部都有,而且有些就算有驱动,也有可能不支持抓取空中包。
usb网卡除了驱动以外,首先得它的固件支持这种抓包形式,若固件支持,那么还好解决,只要修改对应的驱动程序并且重新编译使用,就能让网卡支持抓取空中包的模式(windows驱动同理,所谓的网卡不支持抓包基本上都是因为他们所提供的windows驱动没有把这功能做进去)。
再具体点就会涉及到一些内核层面和更底层的代码逻辑了,这里就不详细说明了。

2、上面步骤的第四步设置抓包信道和频宽那里,对于linux和安卓系统来说,一般有两种方式,一种的netlink,一种是ioctl,具体使用哪种得看驱动实现,也可以自己添加修改。不过一般情况下驱动两种情况都支持(还有些厂商有自己封装的对应工具,例如bcm系列的wl工具等)。

3、除了tcpdump之外,抓包方式还有通常所说的airodump-ng,不过如果只是抓包下来自己分析,tcpdump够用了,并不是非airodump-ng不可。

4、网卡接口(比如本文的wlmon)只有处于monitor模式,才能抓取空中包,具体来说,无线开发里所说的抓取空中包是指在空中传输的数据包,这种数据包没有经过无线物理层和数据链路层的解封装处理,是从发送端发送出来的原封不动的数据包。例如这种被wireshark解析出mac地址的就是空中包。
在这里插入图片描述
空中包最明显的一个特点是可以解析出在哪个信道传播、传播速率是多少、信号强度是多少、无线传输使用的物理层协议等。
在这里插入图片描述

而且抓取空中包的另一个特性是,它所抓取的数据包是空中的任意设备的数据包,不管三七二十一能抓的都抓下来,不管是哪个设备发送的。

5、若网卡接口(比如本文的wlmon)不处于monitor模式,那么不能抓取空中包,抓到的协议栈分类里的网络层数据包,这时候的数据包在wireshark上解析显示出的是ip地址。而且只能看到发往本网卡或由本网卡发出的数据包(要求这种数据包至少要有网络层),看不到其他设备的数据包,也看不到数据包的信道、速率、信号强度等。
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐