一. 背景

       做无线开发的最头疼的就是连得好好的,为什么突然连不上了,想找出原因的时候,除了看当前的log外,剩下的就是现场的空中包。但是抓空中包往往需要专业的工具和软件,目前听的比较多的当属Omnipeek,但是Omnipeek是收费的,一个正版的license都要1000多刀,再加上抓包卡需要专门的驱动,大多数公司都不见得用得起,更别提如果只是学生或者还没入门的开发爱好者。

       所谓工欲善其事,必先利其器。如果没有抓包的话,想进行无线开发真可谓举步维艰。现在大家对知识产权保护的意识越来越强,学生为了学习用破解版的Omnipeek还可以理解,但是如果进行商业行为,哪天被抓住,可就......

       这时候就在想,如果能够有一个即免费有好用的抓包工具,那该多好啊。前段时间,碰巧发现MAC系统居然自带抓包工具,抓到的包再配合Wireshark进行分析,真是完美极了,于是赶快记录下来。

二. MAC系统抓包

        MAC系统和Linux系统的使用相似,但是胜在乔帮主融入了自己对艺术的独到见解,成为广大程序员和白领的挚爱,加上现在大家的消费能力提高了,使用苹果的人越来越多,所以不管是买MAC一体机还是MacBook都变得越来越能被大家接受。如果心疼的话就想想一个正版的Omnipeek license。

        在一般情况下,点击我们MAC系统的Wi-Fi图标只能看到当前附近有哪些可用的AP,也就是路由器。

mac使用clarles 抓包 mac空口抓包_mac使用clarles 抓包

       但是如果在点Wi-Fi图标的同时按下键盘上的option键的话,情况就会发生变化,除了扫描到的路由器外还多了几个选项,其中的打开无线诊断真是我们需要的

mac使用clarles 抓包 mac空口抓包_抓包_02

        选择了打开无线诊断后,在左上角的“窗口”选项里会发现有一个“嗅探器”,英文名“sniffer”,这个就是我们要找的了

mac使用clarles 抓包 mac空口抓包_mac使用clarles 抓包_03

       点了嗅探器后会出现一个小窗口,上面会让你选择需要扫描的信道和频宽,这个时候只要选择你所要检查的AP的信道就好了,然后点击开始就可以抓取AP的数据包了。

mac使用clarles 抓包 mac空口抓包_抓包_04

       对于不知道自己想要查看的AP处于哪个信道,在能连上AP的情况下可以登陆路由器界面查看,不知道的情况这里推荐一个很好用的Wi-Fi辅助工具,叫做Wi-Fi分析助手,安卓手机找到APP下载就可以,里面会显示处扫到的AP所在的信道。

mac使用clarles 抓包 mac空口抓包_mac使用clarles 抓包_05

        剩下的只要等到你觉得可以停止抓包然后结束整个过程就可以了,有点需要注意的是抓到的数据包都是作为临时文件存在/tmp/var/目录下,如果想要保存起来的话,需要把抓到的包保存到其他目录下。

三. Wireshark分析抓包

        当需要分析抓包的时候,Wireshark就再次显示出它强大的一面了,不过Wireshark不像Omnipeek的界面做的那么友好,在过滤报文的时候需要自己敲命令,这样很多初学者会显得很痛苦,但是工具的目的只不过是为了方便你的工作,重要的是对核心知识的掌握,无论是使用Omnipeek,或是Wireshark,都是建立你对Wi-Fi协议的熟悉程度之上。下面就把我知道的一些常用命令分享给大家。

3.1 根据MAC地址过滤报文

        Wireshark支持根据报文的帧类型和MAC地址过滤需要的报文,比如说我们要过滤某一个AP的所有空中包,就需要根据该AP的MAC地址进行过滤,比如我想搜索一款叫做TP-LINK_349E的路由器,而且我知道它的MAC地址最后两个字节为34:9e,那我只需要在过滤器栏里敲命令"wlan.addr contains 34:9e"就可以过滤出所有包含有34:9e地址的报文了

mac使用clarles 抓包 mac空口抓包_Wireshark_06

       一般分析都是分析某一个STA和该AP的通信过程,这样只要把另一个STA的MAC地址也加进去就可以了,比如“wlan.addr contains XX:XX && wlan.addr contains YY:YY”,这样过滤出来的报文就全都是两个设备通行的报文了。但是这样就会丢掉部分包,因为过滤规则是留下的报文需要同时包涵两个MAC地址,这样像Beacon, ACK这样只包涵一个的报文就会被丢弃掉。遇到这种情况,如果想要保留所有相关的报文,就需要增加过滤条件,我一般会根据包类型进行过滤。

3.2 根据包类型过滤报文 

      根据包类型进行过滤,就是根据报文的subtype进行过滤,比如想过滤出所有的beacon帧,那么命令是“wlan.fc.type_subtype == 0x0008”,但是记住所有帧的subtype并不是一件容易的事情,所以我一般会点开某一个beacon帧,然后找到subtype,右键选择subtype为过滤条件

mac使用clarles 抓包 mac空口抓包_抓包_07

       这样就会过滤出所有的beacon帧,在加上MAC地址作为条件,就可以过滤出该AP的所有beacon帧了,如“wlan.fc.type_subtype == 0x0008 && wlan.addr contains 34: 9e”。

       刚刚说到如果是搜集完整的通信过程,如果过滤条件是需要包涵两个通信设备的MAC地址的话,会漏掉例如beacon帧这样的包,那么过滤条件可以设定为“(wlan.fc.type_subtype == 0x0008 && wlan.addr contains 34: 9e) || (wlan.addr contains XX:XX && wlan.addr contains YY:YY)”,这样beacon帧也可以保存下来,以此类推,只要加上或条件,就可以存下来其他需要的报文。

        对于其他常用的包,如果四次握手的过程和EAP通信的过程,只要加入“eapol”作为过滤条件就可以过滤出整个过程,这里就不再展开了。

3.3 解密报文

       Wi-Fi建立连接的过程是明文传播,但是数据包一般都是加密的,对于这种情况,需要进行解密,解密数据包需要抓到完整的4次握手过程,然后才能解密所有的数据包。对于解密的选项在左上角“Wireshark -> Preference -> Protocol” 里面选择IEEE802.11,在里面edit填上对应的加密协议,然后密码和SSID,格式是“password:ssid”。

mac使用clarles 抓包 mac空口抓包_抓包工具_08

3.4 颜色格式

        对于一个交互超长的报文,一眼望过去,白纸黑字密密麻麻,看得第一眼就头皮发麻,对于这种情况,如果不同类型的报文使用不同的颜色,看着会舒服很多,也方便辨识,对应的设定选项在“视图 -> 着色规则”中,可以自己根据需要设定过滤规则的条件,例如我设置beacon帧为绿色,那么在过滤规则中将背景色设定为绿色,那么在选中规则后,所有的beacon帧都会显示为绿色。

mac使用clarles 抓包 mac空口抓包_抓包_09

四. 结束语

        以上就是在MAC 系统中使用自带抓包工具配合Wireshark进行分析的方法,当然Wireshark还有很多强大的功能可以使用,等着大家再去发现。最后还是想说一句,工具只是提供一个方便分析问题的方法,不管用哪个系统,用什么工具,都需要建立在对Wi-Fi协议的熟悉程度上,不要过分在乎使用的工具是什么。