一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

了解和使用GNU Radio軟件的功能并制作藍(lán)牙抓包器

蛇矛實(shí)驗(yàn)室 ? 來源:蛇矛實(shí)驗(yàn)室 ? 2024-11-15 16:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

在上一小節(jié)中,我們簡(jiǎn)單介紹和使用了GNU Radio軟件的基礎(chǔ)功能和模塊,同時(shí)通過GNU Radio Companion(GRC)創(chuàng)建了簡(jiǎn)單的流程圖,展示了信號(hào)生成、處理和輸出的流程。最后通過制作一個(gè)FM receiver來加深對(duì)GNU Radio的了解。在這一小節(jié)中我們將更加深入的了解和使用GNU Radio軟件的功能,并制作一個(gè)簡(jiǎn)單的藍(lán)牙抓包器。

GNU Radio使用

Bits的打包和解包

Bits的打包與解包對(duì)于表示二進(jìn)制數(shù)據(jù)(與數(shù)字化 RF 樣本相對(duì))以及使用調(diào)制器模塊(Constellation調(diào)制器、GFSK 調(diào)制器和 OFDM 發(fā)射器)非常有用。我們創(chuàng)建一個(gè)新流程圖并將 Random Source 模塊添加到工作區(qū),把他的輸出設(shè)置為byte,此時(shí)輸出端口由紫色顯示。

b9aeded4-9076-11ef-a511-92fbcf53809c.png

然后將 Throttle、Pack K Bits、Char to Float 和 QT GUI Histogram Sink 模塊按照下圖添加到流程圖并連接它們:

編輯 Pack K Bits 的屬性,設(shè)置K為4

編輯QT GUI Histogram Sink的屬性,設(shè)置Number of Bins: 1024,Max x-axis: 16。

編輯另一個(gè)QT GUI Histogram Sink的屬性,設(shè)置Number of Bins: 1024,Max x-axis: 16。

b9bee496-9076-11ef-a511-92fbcf53809c.png

此時(shí)我們開始運(yùn)行流程圖, 4 Bit的直方圖顯示 0 到 15 的值,而1 Bit的直方圖顯示 0 和 1 的值 。

b9dfe1c8-9076-11ef-a511-92fbcf53809c.png

隨后我們將 Unpack K Bits 模塊添加到工作區(qū),并將其連接在 Pack K Bits 模塊和 Char to Float 模塊之間。編輯 Unpack K Bits 模塊屬性并輸入 K: 4,流程圖如下。

b9f066c4-9076-11ef-a511-92fbcf53809c.png

此時(shí)如果我們運(yùn)行一下,就會(huì)得出上面框圖是0-15的數(shù)值范圍,下面的1bit只有0和1。

ba0aed14-9076-11ef-a511-92fbcf53809c.png

流和向量

GNU Radio 中的塊可以使用流或向量進(jìn)行連接。流為每個(gè)時(shí)間單位攜帶 1 個(gè)實(shí)例樣本,且必須具有數(shù)據(jù)類型,例如 Float 32 或 Byte。向量是能夠在單個(gè)時(shí)間實(shí)例中攜帶多個(gè)采樣,代表了多個(gè)數(shù)據(jù)的平行存在。GRC 使用較淺的顏色表示流,使用較暗的顏色表示向量。我們用下面的流程圖來更深刻的理解一下流,第一個(gè)數(shù)據(jù)源是一個(gè)1k的cosine函數(shù),這個(gè)輸出的stream類型的數(shù)據(jù)就是數(shù)據(jù)流。然后我們使用節(jié)流閥進(jìn)行一個(gè)流量控制,然后可以將這個(gè)流送到一個(gè)QT GUI Time Sink中來展示出來。運(yùn)行效果如下:

ba2e7126-9076-11ef-a511-92fbcf53809c.png

然后我們將第一個(gè)流程圖的信號(hào)源復(fù)制出三份,然后分別將它們的輸出類型設(shè)置成complex、float和short。此時(shí)我們可以用一個(gè)stream to vector的,將流轉(zhuǎn)化為向量,我們可以收集128個(gè)數(shù)據(jù),然后合成一個(gè)向量。

ba4dfd70-9076-11ef-a511-92fbcf53809c.png

此時(shí)運(yùn)行效果如下:

ba6e1ab0-9076-11ef-a511-92fbcf53809c.png

我們使用一個(gè)流轉(zhuǎn)成向量的典型例子,更形象地展示一下。下面這個(gè)流程圖引入了兩個(gè)數(shù)據(jù)源,一個(gè)是1KHz的cosine信號(hào)源,另一個(gè)是100Hz的cosine信號(hào)源,然后第一個(gè)信號(hào)源設(shè)置浮動(dòng)為正負(fù)1,第二個(gè)信號(hào)源設(shè)置浮動(dòng)為正負(fù)0.1,相當(dāng)于我們有兩個(gè)數(shù)據(jù)流,此時(shí)我們用一個(gè)strings to vector,把倆個(gè)數(shù)據(jù)源的流留合成為一個(gè)向量,然后接著我們?cè)侔押铣傻南蛄哭D(zhuǎn)換成一個(gè)數(shù)據(jù),然后把它顯示出來。

ba850ee6-9076-11ef-a511-92fbcf53809c.png

我們可以運(yùn)行流程圖查看一下效果,第一個(gè)是我們的100Hz的cosine信號(hào)源正負(fù)0.1的效果圖,第二個(gè)是1KHz的cosine信號(hào)源正負(fù)1的一個(gè)數(shù)據(jù)源。第三個(gè)圖為把兩個(gè)交替信號(hào)源顯示的效果圖。

bab30b20-9076-11ef-a511-92fbcf53809c.png

類似byte的打包解包,我們可以用vector to stream模塊將兩個(gè)stream打包成一個(gè)vector,那我們也可以利用vector to streams模塊將數(shù)據(jù)拆解回原來的樣子。下面流程圖中,兩個(gè)數(shù)據(jù)源經(jīng)過streams to vector,然后打包把它先顯示出來,然后調(diào)用Vector to Streams 模塊反序列化向量樣本并將其轉(zhuǎn)換為流,執(zhí)行與Streams to Vector 模塊的相反操作。

bace13d4-9076-11ef-a511-92fbcf53809c.png

我們可以運(yùn)行流程圖查看一下效果,此時(shí)經(jīng)過打包之后的一個(gè)合成數(shù)據(jù)源已分為兩個(gè)流:

bae53f28-9076-11ef-a511-92fbcf53809c.png

層次塊

當(dāng)我們想要在設(shè)計(jì)其他流程圖中,如何自己設(shè)計(jì)一個(gè)模塊并使用呢?這時(shí)就用到了層次塊。在GNU Radio Companion軟件中點(diǎn)擊就File-New-Hier Block,即可創(chuàng)建層次塊流程圖。在新的 GRC 選項(xiàng)卡中創(chuàng)建流程圖如下:

bb059282-9076-11ef-a511-92fbcf53809c.png

雙擊選項(xiàng)塊并編輯屬性,設(shè)置Id: FrequencyShifter,Title: Frequency Shifter Block。

bb1a3160-9076-11ef-a511-92fbcf53809c.png

此時(shí)我們需要注意變量與 GNU Radio 中的參數(shù)不同。參數(shù)為 hier 塊創(chuàng)建一個(gè)接口以接受來自外部源的值,而變量?jī)H存在于 hier 塊內(nèi)部。

bb419d86-9076-11ef-a511-92fbcf53809c.png

例如, samp_rate 變量只能從 hier 塊內(nèi)訪問。

bb5509b6-9076-11ef-a511-92fbcf53809c.png

那么我們就需要?jiǎng)h除 samp_rate 變量,將其替換成為參數(shù),我們將倆個(gè)參數(shù)塊添加到 GRC 工作區(qū)中,以便可以從較大流程圖中的另一個(gè)塊進(jìn)行更新。

設(shè)置第一個(gè)參數(shù)屬性:Id: samp_rate,Label: Sample Rate,Type: Float

設(shè)置第二個(gè)參數(shù)屬性:Id: frequency,Label: Frequency,Type: float

bb72d928-9076-11ef-a511-92fbcf53809c.png

流程圖設(shè)置完成后,需要generate保存。但是此時(shí)從右側(cè)功能模塊中搜索,并不能搜索到我們保存的層次塊。

bb931be8-9076-11ef-a511-92fbcf53809c.png

我們需要單擊重新加載塊按鈕,此時(shí)再次從右側(cè)功能模塊中搜索,就可以搜索到我們保存的層次塊了。

bbaf5808-9076-11ef-a511-92fbcf53809c.png

創(chuàng)建一個(gè)python

python塊是什么功能呢,我們要實(shí)現(xiàn)一個(gè)功能塊,它可以中有多個(gè)輸入,并且會(huì)根據(jù)屬性中的特定參數(shù)進(jìn)行相應(yīng)處理。通常,Python 塊有兩個(gè)屬性:代碼(代碼,一個(gè)點(diǎn)擊框,其中包含該塊的 Python 代碼的鏈接)和參數(shù)(塊的輸入?yún)?shù))。在下面的例子中,我們要實(shí)現(xiàn)一個(gè)可以實(shí)現(xiàn)輸入相加或者相乘的一個(gè)塊。該功能塊的參數(shù)可以決定是相加還是相乘。我們搜索 Python 塊并將其添加到工作區(qū):

bbd93218-9076-11ef-a511-92fbcf53809c.png

單擊 Open in Editor 編輯 Python 代碼:

bbf3b8e0-9076-11ef-a511-92fbcf53809c.png

此時(shí)編輯器窗口中會(huì)顯示 Python 塊的 Python 代碼:

注意:__init__() 和 work() 函數(shù)必須符合 GNU Radio 軟件框架的規(guī)則和期望進(jìn)行修改,該框架控制塊輸入和輸出之間的數(shù)據(jù)傳輸。

bc0854d0-9076-11ef-a511-92fbcf53809c.png

我們可以在編輯器菜單中選擇“查找和替換”,將默認(rèn)example_param參數(shù)重命名以方便我們自己查看,這里我全部替換為additionFlag。

bc25f80a-9076-11ef-a511-92fbcf53809c.png

接下來就是修改功能實(shí)現(xiàn)部分了,該python文件中定義了默認(rèn)塊有一個(gè)輸入和一個(gè)輸出,但是我們需要該塊的兩個(gè)輸入,我們需要將第二個(gè) np.complex64 添加到 in_sig列表中。同時(shí),python塊在處理?xiàng)l件分支時(shí),處理邏輯分別為加和乘,那么我們需要修改work函數(shù)。最終修改的代碼如下:

bc467d46-9076-11ef-a511-92fbcf53809c.png

根據(jù)我們?cè)O(shè)計(jì)的邏輯,在“加法”或“乘法”模塊中參數(shù)選擇“True”處理邏輯為兩個(gè)信號(hào)源的相加。運(yùn)行流程圖給出以下兩個(gè)圖:

bc638472-9076-11ef-a511-92fbcf53809c.png

當(dāng)我們?cè)O(shè)置參數(shù)為 Additionflag 屬性輸入 False,處理邏輯為相乘。這時(shí)兩個(gè)復(fù)數(shù)正弦曲線相乘會(huì)在兩個(gè)頻率之和處產(chǎn)生一個(gè)正弦曲線。因此,頻率為 1,000 的信號(hào)源與頻率 3,000 的乘積是頻率為 4,000 的復(fù)正弦曲線。運(yùn)行流程圖時(shí)可以看到這個(gè)復(fù)雜的正弦曲線:

實(shí)驗(yàn):制作一個(gè)簡(jiǎn)單的藍(lán)牙抓包器

實(shí)驗(yàn)的github倉庫地址為"https://github.com/oldprogram/sdr4iot-ble-rx",該工具可以捕獲的 BLE 數(shù)據(jù)包并通過命名管道 (FIFO) 直接顯示在 Wireshark 中。我們使用Gnu Radio 用于接收和解調(diào)傳入的 BLE 數(shù)據(jù)包。我們打開倉庫中的流程圖進(jìn)行查看,流程為使用hackrf one設(shè)備收集到的數(shù)據(jù),然后送到一個(gè)閾值濾波,-70的db的一個(gè)閾值濾波進(jìn)行靜噪和濾波。再送到GFSK模塊(藍(lán)牙的一種調(diào)制方式為GFSK)中進(jìn)行個(gè)解碼,解碼后的數(shù)據(jù)再進(jìn)行一個(gè)打包。然后數(shù)據(jù)會(huì)通過ZMQ模塊(ZMQ模塊,下小節(jié)中會(huì)進(jìn)行講解)pub出去。這樣我們就可以用這個(gè)流程圖實(shí)現(xiàn)一個(gè)功能,就是拿到了藍(lán)牙最原始的GFSK數(shù)據(jù)包,并把它解出來就拿到藍(lán)牙的物理層級(jí)別的數(shù)據(jù)。那接下來再寫一個(gè)數(shù)據(jù)鏈路層的一個(gè)數(shù)據(jù)包的解析(ble_dump.py文件實(shí)現(xiàn)此功能,下一小節(jié)中講解),就能把藍(lán)牙的廣播包提取出來。

bc81c2b6-9076-11ef-a511-92fbcf53809c.png

我們打開終端,運(yùn)行下面的命令進(jìn)行藍(lán)牙抓包:

mkfifo /tmp/fifo1 wireshark -S -k-i /tmp/fifo1 ./ble_dump.py-o/tmp/fifo1

抓包效果如下:

bcae1e2e-9076-11ef-a511-92fbcf53809c.png

總結(jié)

這一小節(jié),我們更加深入的了解和使用GNU Radio軟件的功能,同時(shí)對(duì)流程圖基礎(chǔ)知識(shí)也有了更好的拓展。從這一小節(jié)開始我們將接觸與python的交互,方便我們更加高效和快捷的使用GNU Radio。在下一小節(jié)中,我們會(huì)學(xué)習(xí)ZMQ模塊的使用以及藍(lán)牙抓包器的原理。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 藍(lán)牙
    +關(guān)注

    關(guān)注

    116

    文章

    6077

    瀏覽量

    173980
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    5152

    瀏覽量

    89209

原文標(biāo)題:軟件無線電安全之GNU Radio基礎(chǔ)(下)

文章出處:【微信號(hào):蛇矛實(shí)驗(yàn)室,微信公眾號(hào):蛇矛實(shí)驗(yàn)室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    軟件無線電安全之GNU Radio基礎(chǔ)知識(shí)

    GNU Radio是一款開源的軟件工具集,專注于軟件定義無線電(SDR)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)。該工具集支持多種SDR硬件平臺(tái),包括USRP、HackRF One和RTL-SDR等。用戶可以
    的頭像 發(fā)表于 02-25 10:20 ?8135次閱讀
    <b class='flag-5'>軟件</b>無線電安全之<b class='flag-5'>GNU</b> <b class='flag-5'>Radio</b>基礎(chǔ)知識(shí)

    經(jīng)典藍(lán)牙解析說明

    我們更便捷地定位和解決各種技術(shù)難題。對(duì)于藍(lán)牙技術(shù)而言,的作用同樣不可小覷。它強(qiáng)大的捕獲功能讓我們能夠輕松獲取空中傳輸?shù)?/div>
    的頭像 發(fā)表于 07-24 09:04 ?3388次閱讀
    經(jīng)典<b class='flag-5'>藍(lán)牙</b><b class='flag-5'>抓</b><b class='flag-5'>包</b>解析說明

    什么是GNU Radio開源軟件無線電平臺(tái)?

    GNU Radio開源軟件無線電平臺(tái)究竟是什么?
    發(fā)表于 08-02 08:18

    什么是GNU Radio?

    什么是GNU Radio? 開放的軟件無線電平臺(tái)有什么優(yōu)勢(shì)?
    發(fā)表于 08-02 08:13

    GNU radio 和USRP入門指導(dǎo)

    GNU radio 和USRP入門指導(dǎo)
    發(fā)表于 12-10 13:33 ?42次下載

    GNU-Radio的安裝

    GNU-Radio的安裝
    發(fā)表于 03-27 08:44 ?1次下載

    GNU_radio_和USRP_學(xué)習(xí)手冊(cè)

    GNU_radio_和USRP_學(xué)習(xí)手冊(cè)
    發(fā)表于 03-27 09:15 ?11次下載

    了解GNU Radio

    的機(jī)會(huì),激發(fā)他們聰明的利用射頻電波的能力。 GNU Radio 提供信號(hào)運(yùn)行和處理模塊,用它可以在易制作的低成本的射頻(RF)硬件和通用微處理
    發(fā)表于 11-21 20:34 ?4734次閱讀

    如何在Linux下搭建GNU Radio平臺(tái)及它的應(yīng)用分析

    GNU Radio是一個(gè)開源的軟件無線電開發(fā)平臺(tái),可以通過圖形化界面或C++、Python等文本語言快速開發(fā)軟件無線電應(yīng)用,本文介紹了Linux下G
    的頭像 發(fā)表于 01-02 07:56 ?4823次閱讀
    如何在Linux下搭建<b class='flag-5'>GNU</b> <b class='flag-5'>Radio</b>平臺(tái)及它的應(yīng)用分析

    學(xué)習(xí)GNU Radio需要應(yīng)該如何準(zhǔn)備

    學(xué)習(xí)開源軟件無線電(GNU Radio)需要有一定電腦基礎(chǔ)和深入的通信與信號(hào)處理知識(shí),本文列舉了一些有用的資源,包括教程、網(wǎng)頁鏈接和一些在線教程。本教程的目的是幫助GNU
    發(fā)表于 11-18 10:31 ?2次下載
    學(xué)習(xí)<b class='flag-5'>GNU</b> <b class='flag-5'>Radio</b>需要應(yīng)該如何準(zhǔn)備

    GNU Radio開源軟件無線電平臺(tái)的簡(jiǎn)介

    GNU Radio(開源軟件無線電)是一個(gè)對(duì)學(xué)習(xí),構(gòu)建和部署軟件定義無線電系統(tǒng)的免費(fèi)軟件工具
    發(fā)表于 10-26 10:41 ?1次下載
    <b class='flag-5'>GNU</b> <b class='flag-5'>Radio</b>開源<b class='flag-5'>軟件</b>無線電平臺(tái)的簡(jiǎn)介

    GNU Radio:開放的軟件無線電平臺(tái)

    GNU Radio:開放的軟件無線電平臺(tái)介紹。
    發(fā)表于 05-27 11:07 ?10次下載

    USB數(shù)據(jù)軟件程序下載

    USB數(shù)據(jù)軟件程序下載
    發(fā)表于 09-09 16:01 ?9次下載

    【RT-Thread學(xué)習(xí)筆記】好用高性價(jià)比的BLE藍(lán)牙

    作為基于藍(lán)牙協(xié)議的開發(fā)者,少不了各種需要分析藍(lán)牙報(bào)文的應(yīng)用場(chǎng)景;而專業(yè)的藍(lán)牙
    的頭像 發(fā)表于 07-30 11:45 ?3393次閱讀
    【RT-Thread學(xué)習(xí)筆記】好用高性價(jià)比的BLE<b class='flag-5'>藍(lán)牙</b><b class='flag-5'>抓</b><b class='flag-5'>包</b><b class='flag-5'>器</b>

    AXU2CGB Zynq UltraScale板上的GNU Radio工具 第4部分

    電子發(fā)燒友網(wǎng)站提供《AXU2CGB Zynq UltraScale板上的GNU Radio工具 第4部分.zip》資料免費(fèi)下載
    發(fā)表于 06-14 15:08 ?0次下載
    AXU2CGB Zynq UltraScale板上的<b class='flag-5'>GNU</b> <b class='flag-5'>Radio</b>工具<b class='flag-5'>包</b> 第4部分