網絡包
抓包來debug程序還是比較方便的,最早知道的軟件是WireShark
,它像是形成了一種行業標準,但是從底層抓取網絡通信包,我記得調試PPOE
的時候第一次使用這個軟件,不過到現在也沒有弄清楚這個軟件的過濾器規則怎麼寫。如果是獲取http/https
的包Fiddler
是最適合的,因爲它做了反向代理,證書之類的相關操作。
藍牙包
藍牙也是一大塊,如果是簡單的通信,比如SPP/BLE,可以藉助Android系統來抓取,SPP的底層協議RFCOMM在Android系統中是通過Socket實現的通信,只需要在BluetoothSocket
類的中的write和read上打上日誌,就可以實現抓包。BLE只需要在BluetoothGatt
類的writeCharacteristic
和onNotify
中打上日誌就可以了。爲什麼沒有readCharacteristic
,我暫時也不清楚,但是很多都是將onNotify
作爲read
。這是目前的行規。
比如底層的可以直接查看Android系統開發者模式上生成的HCI包日誌,不過這個目前我還沒有用過,據資料顯示也可以使用WireShark打開。
USB
USB通信和網絡通信比較像也是分幾層呢,如果抓取比較底層的是使用usbpcap可以抓取,保存成pcap
格式可以使用WireShark打開進行分析。
USB HID
如果是抓取一些應用層的通信可以使用Bus Hound。在Linux上也可以直接hexdump
來打開這個hidraw
設備,這樣它的輸入內容就比較顯示出來了。
輸入設備
這裏寫輸入設備是因爲比較籠統,可以是USB/BT等,如果只是像簡單的看到其傳輸的鍵值,可以在Android上使用getevent -L
查看,非常的方便(當然也有人將這個小程序移植到了x86上https://github.com/markyzq/getevent_ubuntu)。
串口
串口的抓包軟件就比較多了,還有不少是國人寫的軟件。有些用起來比較順手,有些就會有或多或少的問題,比如單條數據長度的限制。換着用就行了,這裏就不單列舉了。