在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【RT-Thread學習筆記】好用高性價比的BLE藍牙抓包器

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-07-30 11:45 ? 次閱讀

作為基于藍牙協議的開發者,少不了各種需要抓包分析藍牙報文的應用場景;而專業的藍牙抓包器非常昂貴,可能會讓初學者望而卻步。本文結合實際的工程場景,安利一款簡單好用且高性價比的藍牙抓包器,基本可以滿足日常的抓包分析,希望對大家有所幫助。

1 寫在前面

作為一個基于藍牙協議的開發者,少不了各種需要抓包分析藍牙報文的應用場景;這就好比分析電路少不了萬用表,分析串行通訊協議少不了示波器/邏輯分析儀,分析網絡通訊少不了網絡抓包。

作為BLE藍牙的入門級開發者,前期對藍牙的很多特性都不能很好的把握,所以能多抓抓實際的通訊報文來分析分析,一定能夠加快對藍牙通訊協議的理解。

無奈,市面上真正專業級別的藍牙抓包器還是比較昂貴的,一般只有藍牙芯片開發公司或者相關的實驗室會配備這樣的儀器,而對于普通的開發者,更多的是希望能有一塊使用比較簡單,并且性價比能夠被開發者接受的抓包器。

下文將會結合我自己的工程實例,給大家安利一塊藍牙抓包器;雖然前期使用的過程中,也遇到各種各樣的坑,慢慢在使用過程中 自己動手優化,慢慢打造成適合自己使用的小工具,目前也能滿足自己的開發需求,所以推薦給大家。

2 工具簡介

本文要介紹的這個工具是:NRF52832模塊 USB Dongle 支持BLE 5.0藍牙Sniffer抓包協議分析

image-20220629181513676

這款抓包器的底層使用的是 Nordic 的藍牙芯片 nRF52832,這款藍牙芯片可以支持到 BLE5.01Mbps 速率的報文,同時可向下兼容BLE4.2

帶外殼的成品長這樣,價格稍貴一點點:

image-20220630131314034

不帶外殼的成品長這樣,經濟一些(沒錯,我選的就是這個):

image-20220630131354417

當然,如果你有二次開發的能力,這個抓包器還預留了二次開發接口,你可以編譯你自己的固件進行燒錄使用:

image-20220630131153618

3 使用指南

要想成功使用上它,需要搭建一個環境,不過還是比較簡單的,基本參考文檔就可以完成的。

3.1 下載相關資料

Wireshark下載地址: 點這里

Python環境下載地址: 點這里

taobao下單后直接聯系售后,他會發給你一堆資料,如下:

image-20220630132014661

3.2 配置安裝相關環境

image-20220630131724543

最重要的就是最后這個PDF指引文檔 《低功耗藍牙 5.0 Sniffer 抓包工具 RF-DG-32B User Guide 1263534592RF-DG-32B 使用說明_201127.pdf》,參考它基本就可以完成整個環境的搭建安裝。

3.3 使用步驟

image-20220630132453385image-20220630132512015image-20220630132621191image-20220630132656854image-20220630132714081image-20220630132736095image-20220630132759740

3.4 動手抓一抓現場報文

配合一些手機端的BLE調試APP,就可以抓到手機側與終端側交互的報文了,下面來一段實戰操作。

3.4.1 開啟抓包監聽

按照上面的步驟,有過wireshark操作經驗的開發者很快就可以上手,注意一定要把這個勾選上:

image-20220630134055548

然后在這里選上你要監聽(抓取)BLE終端的MAC地址:

image-20220630134156107

3.4.2 廣播包

如果BLE設備正常廣播中,那么在數據區就可以看到廣播包、廣播掃描請求包、廣播掃描回應包都會被抓取到:

image-20220630134508066image-20220630134618939image-20220630134730630

3.4.3 交互數據包

一般BLE有五種數據交互方式,如下所示:

image-20220630140152707

下面以 notify 的交互報文做演示:

手機APP發往BLE終端

image-20220630140648041

BLE終端回復手機APP

image-20220630140817151

3.4.4 其他報文

還有一些其他類型的BLE報文,這個需要對BLE協議有些了解才能明白:

image-20220630135353473image-20220630135241430image-20220630135224343image-20220630140541704image-20220630140931190

4 動手改造

4.1 發現痛點

在上面的使用步驟中,大家也可以會發現,在決定要抓取 哪個 BLE終端的報文時,需要在wireshark的插件中的 Device 下拉框中選中對應設備的 MAC,而這恰恰就是最難的,也是最頭疼的,最最主要的原因是,它沒有輸入搜索篩選框,只能勾選,而且這些MAC地址還是沒有經過排序的,來,感受一下:

find-mac

怎么樣,眼睛花了嗎你的MAC地址,找到了嗎

如果沒有,那重新再找一遍吧!!!

每次使用這個,我吐槽一次,太不任性化了,你搞個 輸入搜索框 會死啊???

4.2 改造優化

說到改造,我也想直接加個 輸入搜索框 完事,但我一個搞嵌入式的,搞不了這些上層UI啊,無奈,放棄了!

后來,通過觀察和摸索,我發現整個wireshark的插件在執行相關抓包操作的時候都是調用到Python方法,在安裝環境的時候我們有裝Python3,而且把相關的wireshark擴展包放到了指定的擴展包目錄,打開一看,里面全是一些腳本和Python文件。

于是,我開始想,既然這個插件找到這些 Device 列表都是通過Python接口返回的,那么我們可不可以,在返回這個Device列表的時候,加些規則限制,比如 只把我需要的MAC地址的設備呈現出來

于是開始去分析它的擴展包的工程代碼,如下所示:

image-20220630150526288

還真被我找到了一個 設備添加 相關的方法,如上圖所示。

里面的設備信息,跟我們在那個設備選擇框看到的信息基本一致:設備名 + 信號強度 + MAC地址 + public/random

image-20220630150708304

順著這條線索,我找到了它的代碼邏輯:

首先是 nrfsnifferble.py 初始化的時候進行 DEVICEADDED 消息的訂閱,當收到這個消息的時候,執行 deviceadded 回調;看處理,應該是這個 device_added就會把設備的相應信息內容更新到插件的選擇框里面。

image-20220630151603091

然后再跟蹤一下,發出 DEVICE_ADDED 這個消息是在 Device.py 里面

image-20220630151514449

所以接下來的改造思路就很清晰了,我只需要在append接口里面動手腳攔截就好了。

根據上下文,可以知道device參數包含了設備的MAC地址信息,那么只需要把這個MAC地址信息轉換一下,然后跟我要監聽的設備的MAC地址進行比較過濾,就能到到我的預想目的了。

就像這樣,新增一個 check 函數,不符合我要求的設備,我就直接返回退出:

  1. def append(self, device):
  2. address = device.address
  3. if not self.device_append_check(address):
  4. return
  5. self.devices.append(device)
  6. self.notify("DEVICE_ADDED", device)

為了保證我再抓取其他BLE設備的時候(別的MAC地址),不需要再次改python代碼,那么我需要其他的地方配置一下我需要監聽的MAC地址,于是我想到了在 桌面建立一個文本文件,然后把你要過濾的MAC地址填里面,腳本啟動的時候把這個過濾的MAC地址讀上來,存起來,以備后續做過濾比較。

于是就有了這個一段代碼:

  1. def device_append_check(self, address):
  2. global desktop_ble_mac_file
  3. if not os.path.exists(desktop_ble_mac_file):
  4. return True
  5. str_device_address = self.string_address(address)
  6. str_device_address = str_device_address[0:17]
  7. with open(desktop_ble_mac_file, 'r') as f:
  8. mac=f.read().strip().lower()
  9. filter_device_address = mac[0:2] + ':' + mac[2:4] + ':' + mac[4:6] + ':'
  10. filter_device_address += mac[6:8] + ':' + mac[8:10] + ':' + mac[10:12]
  11. #logging.info(str_device_address)
  12. #logging.info(filter_device_address)
  13. if str_device_address == filter_device_address:
  14. logging.info('----append(follow) filter device address(MAC): ' + str_device_address)
  15. return True
  16. else:
  17. return False

MAC文件的內容是:DC234E864004 字符串格式。

這么一頓操作之后,抓包插件一起來后,我們去設備篩選框里面,就只能看到我要的設備,再也不用增大個眼睛去一個個找了。

真是倍兒爽 ... ...

要想恢復原來那種 看到所有設備 的模式,也很簡單,把桌面那個記錄過濾MAC地址的文件刪除即可,無縫銜接

還有個有趣的事是,在debug的過程中,把這些代碼的log機制也摸通了,下次有空都可以更精細地研究他們的實現代碼了,哈哈哈。

4.3 效果展示

最后,我們來體驗一下改造后的效果,簡直不要太清爽:

new-find-mac

媽媽再也不用擔心我的眼睛了 @_@

5 經驗總結

  • 藍牙抓包能了解一些通訊協議細節的地方,有助于排查一些報文通訊問題;
  • 工欲善其事,必先利其器,發現工具的缺點,自己動手優化改善,小有成就;
  • 該工具借助wireshark的插件完成對報文的解析,對開發者還是很友好的,使用過wireshark的人基本就能夠無障礙使用它;
  • 改造工具的同時,增強了自己摸索未知技術領域的能力和技巧,也順帶學習了一些基礎的python知識;后面學以致用;
  • 科技(工具)的進步,源于有人想要 偷懶
  • 抓包器購買鏈接非廣告,感興趣的可以一看;
  • 改造后的完整python腳本,有興趣的可以聯系我獲取。

6 更多分享

架構師李肯

架構師李肯全網同名),一個專注于嵌入式IoT領域的架構師。有著近10年的嵌入式一線開發經驗,深耕IoT領域多年,熟知IoT領域的業務發展,深度掌握IoT領域的相關技術棧,包括但不限于主流RTOS內核的實現及其移植、硬件驅動移植開發、網絡通訊協議開發、編譯構建原理及其實現、底層匯編及編譯原理、編譯優化及代碼重構、主流IoT云平臺的對接、嵌入式IoT系統的架構設計等等。擁有多項IoT領域的發明專利,熱衷于技術分享,有多年撰寫技術博客的經驗積累,連續多月獲得RT-Thread官方技術社區原創技術博文優秀獎,榮獲CSDN博客專家、CSDN物聯網領域優質創作者、2021年度CSDN&RT-Thread技術社區之星、2022年RT-Thread全球技術大會講師、RT-Thread官方嵌入式開源社區認證專家、RT-Thread 2021年度論壇之星TOP4、華為云云享專家(嵌入式物聯網架構設計師)等榮譽。堅信【知識改變命運,技術改變世界】!


歡迎關注我的gitee倉庫01workstation ,日常分享一些開發筆記和項目實戰,歡迎指正問題。

同時也非常歡迎關注我的CSDN主頁和專欄:

【CSDN主頁-架構師李肯】

【RT-Thread主頁-架構師李肯】

【C/C++語言編程專欄】

【GCC專欄】

【信息安全專欄】

【RT-Thread開發筆記】

freeRTOS開發筆記】

有問題的話,可以跟我討論,知無不答,謝謝大家。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 藍牙
    +關注

    關注

    114

    文章

    5872

    瀏覽量

    171248
  • BLE
    BLE
    +關注

    關注

    12

    文章

    670

    瀏覽量

    59603
  • RT-Thread
    +關注

    關注

    31

    文章

    1305

    瀏覽量

    40402
收藏 人收藏

    評論

    相關推薦

    RT-Thread學習筆記】使用scons命令生成靜態庫

    RT-Thread學習筆記】如何使用scons 命令中buildlib的生成靜態庫?
    的頭像 發表于 07-27 09:13 ?6198次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】使用scons命令生成靜態庫

    RT-Thread軟件定義和使用

    RT-Thread軟件是運行于RT-Thread物聯網操作系統平臺上,面向不同應用領域的通用軟件組件 。RT-Thread 同時提供了開放的軟件
    的頭像 發表于 05-21 11:29 ?1.1w次閱讀
    <b class='flag-5'>RT-Thread</b>軟件<b class='flag-5'>包</b>定義和使用

    RT-Thread Nano入門學習筆記

    RT-Thread Nano入門學習筆記
    發表于 11-26 12:36 ?20次下載
    <b class='flag-5'>RT-Thread</b> Nano入門<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    STM32WB55在RT-Thread系統上移植官方藍牙BLE功能

    STM32WB55在RT-Thread系統上移植官方藍牙BLE功能硬件環境:(1)開發板:ST官方的stm32wb55-st-nucleo開發板軟件環境:(1)開發環境:RT-Thread
    發表于 12-04 12:51 ?17次下載
    STM32WB55在<b class='flag-5'>RT-Thread</b>系統上移植官方<b class='flag-5'>藍牙</b><b class='flag-5'>BLE</b>功能

    RT-Thread 應用筆記 - RTC Alarm 組件的使用

    RT-Thread 應用筆記 - 不正確使用LOG也會引發hard faultRT-Thread 應用筆記 - RTC Alarm 組件的使用RT-
    發表于 01-25 18:18 ?10次下載
    <b class='flag-5'>RT-Thread</b> 應用<b class='flag-5'>筆記</b> - RTC Alarm 組件的使用

    RT-Thread 內核學習筆記 - 理解defunct僵尸線程

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 理解defunct僵尸線程

    RT-Thread 內核學習筆記 - 設備模型rt_device的理解

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 設備模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 內核學習筆記 - 內核對象鏈表結構深入理解

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:23 ?6次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內核對象鏈表結構深入理解

    RT-Thread 內核學習筆記 - 內核對象初始化鏈表組織方式

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:24 ?3次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內核對象初始化鏈表組織方式

    RT-Thread 內核學習筆記 - 內核對象操作API

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:26 ?7次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內核對象操作API

    RT-Thread學習筆記 RT-Thread的架構概述

    RT-Thread 簡介 作為一名 RTOS 的初學者,也許你對 RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會逐漸發現 RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發表于 07-09 11:27 ?4613次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b> <b class='flag-5'>RT-Thread</b>的架構概述

    RT-Thread學習筆記】Makefile的FORCE

    RT-Thread學習筆記】十分鐘學會Makefile的FORCE
    的頭像 發表于 07-30 13:55 ?2688次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】Makefile的FORCE

    RT-Thread學習筆記】如何抓取終端的網絡報文

    RT-Thread學習筆記】如何抓取終端的網絡報文?
    的頭像 發表于 07-30 13:57 ?2924次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】如何抓取終端的網絡報文

    RT-Thread學習筆記】用memwatch排除內存泄露

    RT-Thread學習筆記】使用memwatch排除內存泄露
    的頭像 發表于 07-30 14:01 ?2414次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】用memwatch排除內存泄露

    基于RT-Thread Studio學習

    前期準備:從官網下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發表于 05-15 11:00 ?4145次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>學習</b>
    主站蜘蛛池模板: 欧美日韩一区二区三区视频在线观看 | 国产精品成人va在线观看入口 | 日韩免费在线视频 | 4438成人成人高清视频 | 国产婷婷色一区二区三区深爱网 | 国产午夜人做人视频羞羞 | 国产jzjzjz免费大全视频 | 久久久久999 | 婷婷涩五月 | 欧美午夜色视频国产精品 | 免费看黄在线观看 | 日本黄色网址视频 | 色在线视频播放 | www.亚洲5555.com| 青草午夜精品视频在线观看 | 欧美综合色区 | 国产农村妇女毛片精品久久久 | 特黄一级 | 91色多多| 欧美男女交性过程视频 | 国产中日韩一区二区三区 | 天天干天天色综合网 | 国产亚洲精品美女2020久久 | 亚洲国产成人久久精品图片 | 日本不卡一区二区三区视频 | 亚洲影视一区二区 | 一级免费看片 | 国内免费视频成人精品 | 国产无圣光高清一区二区 | 可以免费看黄色的网站 | 天天插天天狠 | 在线观看高清视频 | 国产精品久久精品福利网站 | 中文字幕va | 日本一区不卡在线观看 | 欧美色欧美色 | 被暗卫肉高h | 亚洲精品资源 | 黄网站色成年片大免费软件 | 亚洲成a人片在线观看导航 亚洲成a人片在线观看尤物 | 亚洲一区二区三区免费视频 |