Android4.2之前抓取hci log都是通過hcidump命令完成的,但是Android4.2 Bluetooth引入了Bluedroid,這是一個新的藍牙協議棧。所以抓取hci log的方法也改變了。
在我的Bluetooth計划里,本來是沒打算寫這篇blog的,但是在留言里看見有人問,所以寫出來分享給那些目前還不會的。
在Android 4.2之后, Bluetooth控制hcidump 的寫開關和默認保存的hci log的路徑,以及各種級別的log 開關是在/etc/bluetooth/bt_stack.conf 文件里. 如果你需要hci log,那你首先需要從手機把這個文件adb pull出來,然后修改這個文件的內容,然后adb push回去。文件里你修改的BtSnoopFileName這個值就是你需要的hci log文件路徑。
bt_stack.conf的文件內容如下
# Enable BtSnoop logging function
# valid value : true, false
BtSnoopLogOutput=true //默認是false,如果需要抓取hcidump 的話,改成 true
# BtSnoop log output file
BtSnoopFileName=/sdcard/btsnoop_hci.log //默認寫hcidump 的路徑,btsnoop_hci.log 就是hcidump的log。可以按照你自己的需要修改。
# Trace level configuration
# BT_TRACE_LEVEL_NONE 0 ( No trace messages to be generated )
# BT_TRACE_LEVEL_ERROR 1 ( Error condition trace messages )
# BT_TRACE_LEVEL_WARNING 2 ( Warning condition trace messages )
# BT_TRACE_LEVEL_API 3 ( API traces )
# BT_TRACE_LEVEL_EVENT 4 ( Debug messages for events )
# BT_TRACE_LEVEL_DEBUG 5 ( Full debug messages )
# BT_TRACE_LEVEL_VERBOSE 6 ( Verbose messages ) - Currently supported for TRC_BTAPP only.
//下面默認值是2,哪個模塊需要抓取更多的log,可以把值改成你想要的.
比如說,你想看各個模塊的log,你就全改成5 Full debug messages
TRC_BTM=5
TRC_HCI=5
TRC_L2CAP=5
TRC_RFCOMM=5
TRC_OBEX=5
TRC_AVCT=5
TRC_AVDT=5
TRC_AVRC=5
TRC_AVDT_SCB=5
TRC_AVDT_CCB=5
TRC_A2D=5
TRC_SDP=5
TRC_GATT=5
TRC_SMP=5
TRC_BTAPP=5
TRC_BTIF=5
這里介紹一種在Android上捕獲藍牙數據包的方法
1. 前提
首先你要有一部Android手機
然后你的Android系統版本要在4.4及以上
我沒有做過Android開發,不清楚開發者們是如何抓藍牙包的
不過我知道可以使用hcidump來抓取藍牙數據包
這里並不介紹這種方法(后續可能會去了解一下)
2. 開啟功能
在開發者選項中有一個功能
- [Enable Bluetooth HCI snoop log/啟用藍牙 HCI 信息收集日志]
開啟它
3. 抓包
然后你可以進行各種藍牙操作,結束后的抓包文件就在
/sdcard/btsnoop_hci.log
將它拷貝出來放在電腦上,就可以用Wireshark直接看了
可以使用比如bthci_acl, btl2cap, bthfp等過濾器來過濾數據包查看你所關心的協議