Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect since PHP 8.1 in /var/www/html/plugins/system/falangdriver/falangdriver.php on line 534

Deprecated: Using null as the key parameter for array_key_exists() is deprecated, use an empty string instead in /var/www/html/plugins/system/t4/src/t4/MVC/Router/T4.php on line 388
使用SDR设备成功抓到蓝牙air packet, 并且wireshark实时解析, 没错就是蓝牙空口抓包器 - bluetooth蓝牙技术
Support us and view this ad

可选:点击以支持我们的网站

免费文章

Deprecated: Using null as the key parameter for array_key_exists() is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/cbPluginHandler.php on line 323

Deprecated: Using null as the key parameter for array_key_exists() is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/cbPluginHandler.php on line 323

Deprecated: Using null as the key parameter for array_key_exists() is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/cbPluginHandler.php on line 323

Deprecated: Using null as the key parameter for array_key_exists() is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/cbPluginHandler.php on line 323

Deprecated: Using null as the key parameter for array_key_exists() is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/cbPluginHandler.php on line 323

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/components/com_comprofiler/plugin/user/plug_cbjdownloads/cbjdownloads.php on line 49

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/components/com_comprofiler/plugin/user/plug_cbblogs/cbblogs.php on line 48

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/components/com_comprofiler/plugin/user/plug_cbarticles/cbarticles.php on line 47

本文章主要介绍用ZYNQ7020+AD9361+Gnu radio搭建一个蓝牙抓包器的文章。 由于之前一直做蓝牙Host,对controller觉得是一个比较虚无缥缈的东西,得不到的总是在骚动,所以最近用我用吃灰了2年的SDR(Software Defined Radio)设备研究了下BLE的抓包,通过BLE的抓包了解下蓝牙的controller的一点点内容,日拱一卒,拱了2个周终于可以抓到蓝牙37通道的广播数据,并且可以把数据传送到Wireshark中。整份工程是C语言+gnu radio来完成,没有借用python等。为什么选用C语言而不用python呢,因为我是想着做完这个找到灵感,是不是可以直接用SDR做蓝牙芯片了(哈哈,愿景哈) 代码连接:https://github.com/sj15712795029/bt_sdr_air_sniffer 欢迎有大牛一起来实现这个伟大的愿景!!! 一. 硬件环境     我是用的SDR设备就是ZYNQ7020 + AD9361 其中 Zynq-7020 是赛灵思(Xilinx)推出的一款高度集成的片上系统(SoC),结合了可编程逻辑 (FPGA) 和基于 ARM Cortex-A9 的双核处理器。这个系统具有强大的灵活性和高性能,适用于广泛的应用领域。Zynq-7020 内部包括了85K可编程逻辑单元,560个DSP slices,220个I/O pins,以及多个高速接口如USB、Gigabit Ethernet 和SDIO。它还集成了多个硬件加速器,能够处理复杂的计算任务。Zynq-7020 提供了广泛的软件支持,包括Linux、FreeRTOS 等操作系统,并配有丰富的开发工具,如Vivado和SDK,帮助开发者快速进行硬件设计和软件开发。该芯片特别适合于嵌入式系统、工业自动化、通信、视频处理和医疗设备等需要高计算能力和实时处理的领域,通过其高效的硬件加速和灵活的配置选项,为用户提供了高度优化的解决方案。   其中AD9361 是美国模拟器件公司(Analog Devices, Inc.)推出的一款高性能、可编程的射频收发器,广泛应用于无线通信系统。以下是对 AD9361 的详细介绍: AD9361 是一款集成的射频收发器,覆盖从 70 MHz 到 6.0 GHz 的频率范围,支持宽带调制解调功能。它具有双通道,支持从 200 kHz 到 56 MHz 的信号带宽,能够适应各种无线通信标准,如 LTE、BT、WiFi、WiMAX 和公共安全通信等。 主要特点包括: 双通道设计:支持多输入多输出 (MIMO) 配置,增强了数据传输的可靠性和效率。 高集成度:将发射器、接收器、PLL、混频器、ADC、DAC 和滤波器集成在一个芯片内,简化了系统设计,减小了物理尺寸。 宽频带:覆盖 70 MHz 到 6.0 GHz 的宽频范围,适用于多种应用。 可编程性:通过 SPI 接口进行控制和配置,支持动态调整频率和带宽。 高线性度和低噪声:提供优异的接收灵敏度和发射质量,确保通信系统的性能和稳定性。 低功耗:在提供高性能的同时,保持较低的功耗,适合于电池供电的便携设备。 AD9361 常用于软件定义无线电 (SDR) 平台、蜂窝基站、微波中继、军事通信和测试测量设备中。其灵活性和高性能使其成为开发多种无线通信系统的理想选择。通过结合高集成度和广泛的频率覆盖,AD9361 有效简化了设计流程,缩短了产品上市时间,同时提供了卓越的系统性能。 1. 抓包短期架构   这个架构主要有几点工作: 1)使用PC GNU radio来控制ad9361做特定频率,特定带宽的射频收发,以及GFSK的解调 2)使用PC GNU radio把GFSK解调( Demodulation )后的数据通过ZMQ发送到C语言程序 备注:中间可能不仅仅是蓝牙数据,可能有其他垃圾数据或者其他无线技术的数据,这点需要在C语言中做解析,剔除掉不是蓝牙的数据 3)C语言程序收到GFSK解调( Demodulation )后的数据就行解析(寻找前导码/读取Access code/读取PDU header/读取PDU payload/读取CRC/去白PDU跟CRC/CRC校验等步骤) 4)做完第三步后通过pcap的format格式把数据发送给wireshark 2. 抓包长期架构   1)使用ZYNQ 7020 ARM Core驱动AD9361进行特定频率收数据,使用ZYNQ 7020 FPGA core进行GFSK的解调(Demodulation)/寻找前导码/读取Access code/读取PDU header/读取PDU payload/读取CRC/去白PDU跟CRC/CRC校验等步骤 2)把得到的数据通过ethernet参照pcap格式发送给wireshark 二 . 使用 目前我做的过程使用起来比较简单: 1)设置ZYNQ7020跟PC在同一个网段,要保证能ping通 ifconfig eth0 10.88.110.66   备注:目前我在GNU Radio中的PlutoSDR Source的URI写死的是10.88.110.66,所以你想用这个工程,需要修改grc文件 2)启动gnuradio-companion gnuradio-companion 需要注意的是我安装的gnu radio的版本是3.8.5   至于怎样安装gnu radio以及libiio libiio-ad9361自行百度,我就不具体介绍了,这些算基本的环节 3)点击运行ble_sniffer_no_gui.grc   4)在ubuntu创建跟wireshark通信的fifo mkfifo /tmp/fifo1 备注:当然你也可以选择用其他通信手段跟wireshark通信,或者保存文件的形式 5)wireshark开启抓包 wireshark -S -k -i /tmp/fifo1 6)开启蓝牙抓包C语言程序 ./bt_start_sniffer -o /tmp/fifo1 备注:一定要先启动wireshark 当你完成以上几步,就可以实现抓包啦 可以看到C语言程序在解析Link layer的数据   wireshark在实时解析蓝牙数据封包     局限性:当前只能抓取BLE的广播通道的数据封包,并且只能抓取Channel 37通道的数据 我有几个疑惑大家也可以给我解惑下: 1)虽然AD9361可以支持40M带宽,但是这也不能抓蓝牙全频段,所以理论上要2个AD9361来实时抓取蓝牙全信道封包,你可能会说:可以写个跳频算法啊,跟着跳频就行了,但是我还想做BR/EDR的sniffer,那个在开始之前你并不知道在哪个channel上去连接,所以你无法提前预知跟着跳频,所以你要全频道抓取(80M带宽) 2)如果是全频段抓取80M带宽(用两个AD9361),但是我怎么知道某一时间抓取的数据他是在哪个频段上呢?我自己的想法是40M带宽,我用100M sample rate去采样,比如50M时候收到的数据,那么是就认定他是20M带宽处的数据,也就是2420M的频率,不知道这种想法是否准确,哪怕准确,我觉得运算量也很大,所以我觉得这一定不是最优解! 三.GNU radio的剖析 在开始介绍GNU radio的各个组件之前,我们先来看下我做的ble sniffer的整个grc文件   下面我们就来一个介绍! 1. plutosdr souce设置 plutosdr soruce是antsdr的射频接收的组件!也就是收到的无线电数据首先会经过这里处理   蓝牙的广播通道是37、38、39     蓝牙低功耗(Bluetooth Low Energy, BLE)的信道37的频率中心点是2402 MHz。由于每个信道的带宽是2 MHz,因此信道37的频率范围可以计算如下: 中心频率:2402 MHz 信道带宽:2 MHz 因此,信道37的频率范围可以表示为中心频率的±1 MHz: 下限频率:2402 MHz - 1 MHz = 2401 MHz 上限频率:2402 MHz + 1 MHz = 2403 MHz 所以,信道37的频率范围是 2401 MHz 到 2403 MHz。 这个是antsdr的射频接收部分配置,如下:   IIO context URI:Antsdr的ip地址, 这个是开发板的ip地址,通过libiio通信 LO Frequency: 如果想抓BLE 37通道的广播,中心频点是2.402g,这里我们虽然写的ble_channel是0,但是对于ble channel其实就是advertising channel 37   sample rate: 采样率为10M RF bandwidth:2M RX Gain: -90 2. Simple Squelch 在 GNU Radio 中,Simple Squelch 是一个用于信号门限控制的模块。它的主要作用是通过设置一个阈值来控制信号的通过或抑制,当输入信号的幅度低于设定的阈值时,输出将被强制为零,从而消除低于此阈值的噪声和不需要的信号。   3. Frequency Xlating FIR Filter 在 GNU Radio 中,Frequency Xlating FIR Filter(频率平移 FIR 滤波器)是一个功能强大的模块,用于对输入信号进行频率平移(变频)和滤波。这个模块结合了频率转换和有限脉冲响应(FIR)滤波的功能,是信号处理中的一个重要工具。 4. GFSK demod 在 GNU Radio 中,GFSK(Gaussian Frequency Shift Keying)解调器是用于解调通过 GFSK 调制的信号的模块。GFSK 是一种常用的频率调制技术,尤其在低功耗和短距离无线通信中,如蓝牙和一些工业、科学和医疗(ISM)频段应用。   5. unpakced to packed 在GNU Radio中,“Unpacked to Packed”模块用于将解包的比特流转换为打包的字节流。这对于处理比特级数据(如BPSK调制解调器输出)非常有用,可以将数据压缩成字节形式以便后续处理或传输。 “Unpacked to Packed”模块将输入的比特流(每个比特作为一个字节存储,通常值为0或1)转换为输出的字节流(每个字节包含多个比特,具体数量由你设置)。此过程的反向操作是“Packed to Unpacked”模块。 6....

继续阅读完整内容

支持我们的网站,请点击查看下方广告

正在加载广告...

FaLang translation system by Faboba

登陆


Deprecated: Using null as the key parameter for array_key_exists() is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/cbPluginHandler.php on line 323

Deprecated: Using null as the key parameter for array_key_exists() is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/cbPluginHandler.php on line 323

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/libraries/src/Menu/AbstractMenu.php on line 164

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/LegacyFoundationFunctions.php on line 217

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/LegacyFoundationFunctions.php on line 219

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/LegacyFoundationFunctions.php on line 227

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/LegacyFoundationFunctions.php on line 231

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/LegacyFoundationFunctions.php on line 234

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/LegacyFoundationFunctions.php on line 237

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /var/www/html/libraries/CBLib/CB/Legacy/LegacyFoundationFunctions.php on line 239

Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect since PHP 8.1 in /var/www/html/plugins/system/falangdriver/falangdriver.php on line 100

Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect since PHP 8.1 in /var/www/html/plugins/system/falangdriver/falangdriver.php on line 100
mysqli object is already closed (500 Whoops, looks like something went wrong.)

Error

HTTP 500 Whoops, looks like something went wrong.

mysqli object is already closed

Exception

Error

  1. */
  2. public function disconnect()
  3. {
  4. // Close the connection.
  5. if (\is_callable([$this->connection, 'close'])) {
  6. $this->connection->close();
  7. }
  8. parent::disconnect();
  9. }
  1. */
  2. public function disconnect()
  3. {
  4. // Close the connection.
  5. if (\is_callable([$this->connection, 'close'])) {
  6. $this->connection->close();
  7. }
  8. parent::disconnect();
  9. }
  1. *
  2. * @since 2.0.0
  3. */
  4. public function __destruct()
  5. {
  6. $this->disconnect();
  7. }
  8. /**
  9. * Alter database's character set.
  10. *
DatabaseDriver->__destruct()

Stack Trace

Error
Error:
mysqli object is already closed

  at /var/www/html/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:318
  at mysqli->close()
     (/var/www/html/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:318)
  at Joomla\Database\Mysqli\MysqliDriver->disconnect()
     (/var/www/html/libraries/vendor/joomla/database/src/DatabaseDriver.php:496)
  at Joomla\Database\DatabaseDriver->__destruct()                

Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect since PHP 8.1 in /var/www/html/plugins/system/falangdriver/falangdriver.php on line 100

Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect since PHP 8.1 in /var/www/html/plugins/system/falangdriver/falangdriver.php on line 100