参考链接:http://blog.csdn.net/mzy202/article/details/32408223
一、实验目的
1、利用CC2540 USB-Dongle来抓取蓝牙主机与从机之间的通讯数据;
二、说明
1、蓝牙从机在广播的时候,广播的通道是可以指定的,广播信道分别是37、38、39,可以指定在任意个通道上广播或三个通道同时广播,更改广播通道参考链接http://blog.csdn.net/feilusia/article/details/48781611;
2、在TI协议栈的官方例程里是默认在广播的时候同时广播三个通道(37、38、39),但是一旦跟主机连接上后,就只在其中的一个信道传输数据,这个是随机性的,这样说,总有一次总有一个通道能捕抓到数据,所以做实验的时候要多试几次;
3、关于对Connect to initiator address 功能的理解:
在第一行的参考链接中,阿莫有提到要填入发起者地址并勾上Connect to initiator address选项,经过本来多次测试并发现勾不勾上好像没有太多区别(有可能是自己知识薄浅),所以对Connect to initiator address这个功能的认识很模糊,在查看手册时发现是这样解释的:
上面英文的大概意思是:在Radio Configuration tab选项中勾上Connect to Initiator Address并填入主机地址,捕抓设备将根据填入的地址去跟随主机与从机之间的数据连接,如果不选择这个选项,捕抓设备不会跟踪指定连接,会开始跟随在当前广播通道上(37)的出现第一个数据连接;
我的理解是:勾上之后,抓包工具就会在设定的当前通道上(37),根据你填入的地址来捕捉数据连接(只会捕抓填入的主机地址的数据连接),而不勾选的话,捕抓工具将捕抓当前通道上(37)第一个出现的数据连接;
在以下实验中不勾选Connect to Initiator Address;
SmartRF Packet Sniffer使用手册中文版:http://pan.baidu.com/s/1o6AbAqu
SmartRF Packet Sniffer使用手册英文版:http://pan.baidu.com/s/1o608kL8
三、实验平台
1、蓝牙协议栈:1.3.2
2、抓包工具:CC2540 USB Dongle
3、抓包软件:SmartRF Packet Sniffer 2.16.3
4、软件平台:IAR For 8051 8.10.3
5、硬件平台:Smart RF开发板(从机),ios官方APP(主机)
四、实验步骤
1、 把“ sniffer_fw_cc2540_usb.hex” 固件烧录到CC2540 USB Dongle,并在电脑上安装 SmartRF Packet Sniffer 驱动,这里就不详细解释(很简单的事);
2.打开SmartRF Packet Sniffer软件:
选择Bluetooth Low Energy并点击Start:
3、点击Start开始捕抓数据:
4、从机开始广播,捕捉到数据如下:
5、主机连接从机,捕抓数据如下:
默认37通道,由于上面说明过:从机广播时是同时广播37、38、39通道,所以不管设置哪个通道都能捕抓到广播数据,在主机和从机连接上之后,会随机选择一个通道进行数据传输,所以这里开始的时候选择37、38、39任何一个通道都一样,没有太大意义和区别,因为广播的时候是3个通道都有数据,而连接上之后,连接通道是随机的,选哪个通道概率都一样;
如果捕抓的数据中有黄色数据,说明主机成功连接从机,并且连接后的数据传输通道是当前通道;
如果没有出现黄色数据而出现卡住的现象,说明主机成功连接从机,但是连接后的数据传输通道不是当前通道37,所以在当前通道是看不到数据的;
那么在此就会想到切换到其他通道去捕抓,先是暂停,然后切换通道到38或39,点击开始,那么你会发现数据还是卡住不动,原因就是在每次暂停之后开始,从机都要重新广播,SmartRF Packet Sniffer才能重新捕抓到数据,那么既然是重新广播了,既代表着主机再次连接上从机时,数据传输的通道又是随机选择了,可能是38.39,也可能是37;
以上想说明的是没必要去重新切换通道,因为切换后就重新广播了,连接后传输通道又是随机了,所以就使用一个通道捕抓就好(当然也可以是38.39);
那么当卡住的时候,只要重新广播(重新广播时如果SmartRF Packet Sniffer数据没有刷新,那就先暂停,再开始就好了),再连接,重复几次,总会有一次看到黄色数据的(不行就多试几次);
6、捕抓主机读操作数据如下:
主机去读从机的数据时,如上图所示,可以捕抓到读请求和读回复;
7、捕抓主机写数据如下:
主机去读从机的数据时,如上图所示,可以捕抓到读请求和读回复;
五、补充
1、首先感谢阿莫和香瓜的支持;
2、之所以写这篇文章是因为我既然用了2天时间才捕抓到数据包,多么低的效率和多么痛苦的事情,先让我哭会,哭完了,我要把它记录下来,让更多的人不要走弯路,当然也有可能我写的不好,还会误导人,所以请各位同学指点指点,共同学习;
3、事情是这样的:由于程序出现通讯问题,所以我想抓一下数据包看看,然后我就去问香瓜,香瓜叫我去看阿莫的教程(就是第一行的链接),我去看了,但是心里没底,明明按照阿莫的方式做了,可还是没有数据出来,本来看阿莫教程后,思路是很清晰的,但有时候又有数据,而别人就分分钟可以,一下子乱了,各种换硬件,换手机,还是不行啊,然后这样下去不是方法啊,绝知此事要躬行,所以觉得不试了,去找各种资料了,逛各种论坛了,完了回来很淡定,就一个37通道,一直重复广播连接,然后几下黄色就出来了,,然后试着读数据写数据,还没捕抓到,心累,不断尝试,有时候又可以看到数据,不知所措,最后想到换个软件试试,结果就OK了,那个软件是IOS调试APP,一下子明了,因为之前用的调试APP不是官方的,是私人做的,有可能那个APP的发送数据格式不符合SmartRF Packet Sniffer的数据格式,所以就捕抓不到了,这是硬伤,所以能用借个苹果手机调试就不要用安卓手机调试了,不可预知的问题搞死人;
4、在把“ sniffer_fw_cc2540_usb.hex” 固件烧录到CC2540 USB Dongle时,下载完成后,你会发现CC2540 USB Dongle绿灯是亮的,拔下来再插上去,绿灯就不亮了,这不是什么硬件啊 驱动啊的问题,只是烧录固件的时候,没有接触好,多烧录几次;
六、总结
1、只需要用一个通道去捕抓数据,在一个通道上多尝试几次就会捕抓到连接后的数据,这时肯定的;
2、如果连接上之后可以看到底层的通讯数据,而看不到自己读操作和写操作的数据,那就换苹果手机的调试APP,因为有些山寨的调试APP可能会有BUG;