
TI CC1352/CC26x2 हार्डवेयर के लिए ब्लूटूथ 5 और 4.x LE स्निफ़र, जिसमें विस्तारित विज्ञापन (extended advertising), सभी PHY मोड, MAC/RSSI फ़िल्टरिंग और Wireshark के साथ संगत PCAP निर्यात का समर्थन शामिल है।
Sniffle TI CC1352/CC26x2 हार्डवेयर का उपयोग करके ब्लूटूथ 5 और 4.x (LE) के लिए एक स्निफर है।
Sniffle में कई उपयोगी विशेषताएं हैं, जिनमें शामिल हैं:
यदि आप फर्मवेयर के लिए बिल्ड वातावरण स्थापित करने की मेहनत नहीं करना चाहते हैं, तो आप UniFlash/DSLite का उपयोग करके प्रीबिल्ट फर्मवेयर बाइनरी को फ्लैश कर सकते हैं। प्रीबिल्ट फर्मवेयर बाइनरी इस प्रोजेक्ट के GitHub रिलीज़ टैब पर रिलीज़ के साथ संलग्न होती हैं। प्रीबिल्ट फर्मवेयर का उपयोग करते समय, master के बजाय रिलीज़ टैग के अनुरूप Python कोड का उपयोग करना सुनिश्चित करें, ताकि master ब्रांच से पीछे रहने वाले फर्मवेयर के साथ संगतता समस्याओं से बचा जा सके।
विभिन्न Linux वितरणों के पैकेज प्रबंधक के माध्यम से उपलब्ध arm-none-eabi-gcc में अक्सर कुछ हेडर फ़ाइलों की कमी होती है या लिंकर कॉन्फ़िगरेशन में कुछ बदलावों की आवश्यकता होती है। न्यूनतम परेशानी के लिए, मैं ऊपर लिंक किए गए ARM GCC का उपयोग करने का सुझाव देता हूं। आप केवल प्रीबिल्ट एक्ज़ीक्यूटेबल्स को डाउनलोड कर निकाल सकते हैं।
TI SDK एक एक्ज़ीक्यूटेबल बाइनरी के रूप में प्रदान किया जाता है जो लाइसेंस अनुबंध स्वीकार करने के बाद बहुत सारे स्रोत कोड निकालता है। Linux और Mac पर, डिफ़ॉल्ट स्थापना निर्देशिका ~/ti/ के अंदर होती है। यह ठीक काम करती है और मेरी मेकफाइलें इस पथ की अपेक्षा करती हैं, इसलिए मैं यहां केवल डिफ़ॉल्ट के साथ जाने का सुझाव देता हूं। यही बात TI SysConfig टूल पर भी लागू होती है।
SDK निकाले जाने के बाद, आपको अपने बिल्ड वातावरण से मेल खाने के लिए एक मेकफ़ाइल संपादित करनी होगी। ~/ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01 (या जहाँ भी SDK स्थापित किया गया था) के भीतर imports.mak नाम की एक मेकफ़ाइल है। Sniffle बनाने के लिए यहां केवल GCC, XDC, cmake और SysConfig के लिए पथ सेट करने की आवश्यकता है। हमें CCS कंपाइलर की आवश्यकता नहीं है। उदाहरण के रूप में नीचे दिया गया diff देखें, और जहाँ भी आपने चीजें स्थापित की हैं उसके अनुसार अनुकूलित करें।```
diff --git a/imports.mak b/imports.mak
index b2cf5bf59..389d1a7c3 100644
--- a/imports.mak
+++ b/imports.mak
@@ -18,14 +18,14 @@
-XDC_INSTALL_DIR ?= /home/username/ti/xdctools_3_62_01_15_core -SYSCONFIG_TOOL ?= /home/username/ti/ccs1270/ccs/utils/sysconfig_1.21.1/sysconfig_cli.sh +XDC_INSTALL_DIR ?= $(HOME)/ti/xdctools_3_62_01_15_core +SYSCONFIG_TOOL ?= $(HOME)/ti/sysconfig_1.21.1/sysconfig_cli.sh
-CMAKE ?= /home/username/cmake-3.21.3/bin/cmake +CMAKE ?= cmake PYTHON ?= python3
TICLANG_ARMCOMPILER ?= /home/username/ti/ccs1270/ccs/tools/compiler/ti-cgt-armllvm_3.2.2.LTS-0 -GCC_ARMCOMPILER ?= /home/username/arm-none-eabi-gcc/12.3.Rel1-0 +GCC_ARMCOMPILER ?= $(HOME)/arm_tools/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-eabi IAR_ARMCOMPILER ?= /home/username/iar9.50.2
SDK संस्करण 8.30.01.01 के अनुसार, GCC (और binutils) के हालिया संस्करणों के साथ संकलन करने के लिए,
लिंकिंग त्रुटियों से बचने हेतु SDK में एक छोटा संशोधन आवश्यक है
"Unknown destination type (ARM/Thumb)" और "dangerous relocation: unsupported relocation"।```
diff --git a/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s b/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
index 187cfd744..4cbf0d384 100644
--- a/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
+++ b/kernel/tirtos7/packages/ti/sysbios/family/arm/m3/Hwi_asm_gcc.s
@@ -236,6 +236,7 @@ lab$1:
@ user code has set the PRIMASK and not cleared it, or when single
@ stepping with interrupts disabled.
+.type ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe, %function
ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe:
b ti_sysbios_family_arm_m3_Hwi_interruptsAreDisabledButShouldNotBe
diff --git a/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s b/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
index 717f49c9a..1c83ed725 100644
--- a/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
+++ b/kernel/tirtos7/packages/ti/sysbios/family/arm/v8m/Hwi_asm_gcc.s
@@ -226,6 +226,7 @@ lab$1:
@ user code has set the PRIMASK and not cleared it, or when single
@ stepping with interrupts disabled.
+.type ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe, %function
ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe:
b ti_sysbios_family_arm_v8m_Hwi_interruptsAreDisabledButShouldNotBe
यह संशोधन करने के बाद, आपको SDK को पुनः संकलित करने की आवश्यकता होगी।``` cd ~/ti/simplelink_cc13xx_cc26xx_sdk_8_30_01_01 make build-gcc -j5
### DSLite प्राप्त करना
DSLite, XDS110 डिबगरों के लिए TI की कमांड लाइन प्रोग्रामिंग और डीबग सर्वर उपकरण है।
CC26xx और CC13xx Launchpad बोर्ड दोनों में XDS110 डिबगर शामिल होते हैं।
दुर्भाग्य से, TI DSLite के लिए स्टैंडअलोन कमांड लाइन डाउनलोड उपलब्ध नहीं कराता।
DSLite प्राप्त करने का सबसे आसान तरीका TI से [UniFlash](http://www.ti.com/tool/download/UNIFLASH) इंस्टॉल करना है।
यह Linux, Mac और Windows के लिए उपलब्ध है। DSLite निष्पादन योग्य फ़ाइल
UniFlash इंस्टॉलेशन निर्देशिका के सापेक्ष `deskdb/content/TICloudAgent/linux/ccs_base/DebugServer/bin/DSLite` पर स्थित होगी।
Linux पर, डिफ़ॉल्ट UniFlash
इंस्टॉलेशन निर्देशिका `~/ti/` के अंदर होती है।
आपको DSLite निष्पादन योग्य निर्देशिका को अपने `$PATH` में रखना चाहिए।
## फर्मवेयर निर्माण
एक बार GCC, DSLite और SDK इंस्टॉल और कार्यशील हो जाएं, तो Sniffle का निर्माण
सीधा-सादा होना चाहिए। बस `fw` निर्देशिका में जाएं और
`make` चलाएं। यदि आपने SDK को डिफ़ॉल्ट निर्देशिका में इंस्टॉल नहीं किया है, तो आपको
मेकफ़ाइल में `SIMPLELINK_SDK_INSTALL_DIR` को संपादित करने की आवश्यकता हो सकती है।
यदि CC26x2R के अलावा किसी अन्य Launchpad संस्करण के लिए निर्माण या इंस्टॉलेशन कर रहे हैं,
तो आपको `PLATFORM=xxx` निर्दिष्ट करना होगा, या तो make के तर्क के रूप में, या
make को आमंत्रित करने से पहले इसे पर्यावरण चर के रूप में परिभाषित करके। `PLATFORM` के लिए समर्थित मान
फर्मवेयर मेकफ़ाइल में पाए जा सकते हैं। `make clean` अवश्य करें
किसी भिन्न प्लेटफ़ॉर्म के लिए निर्माण करने से पहले।
## फर्मवेयर इंस्टॉलेशन (TI Launchpad बोर्ड)
DSLite का उपयोग करके (प्लग इन) CC26x2R Launchpad पर Sniffle इंस्टॉल करने के लिए, चलाएं
`fw` निर्देशिका के भीतर `make load`। किसी भी अन्य Launchpad मॉडल के लिए, आपको
ऊपर वर्णित अनुसार make के लिए `PLATFORM` तर्क निर्दिष्ट करना होगा। आप संकलित
`sniffle.hex` बाइनरी को UniFlash GUI का उपयोग करके भी फ्लैश कर सकते हैं।
## फर्मवेयर इंस्टॉलेशन (SONOFF USB डोंगल)
SONOFF CC2652P डोंगल (CP2102N USB/UART ब्रिज से सुसज्जित) पर Sniffle इंस्टॉल करने के लिए,
[JelmerT/cc2538-bsl](https://github.com/JelmerT/cc2538-bsl) उपयोगिता का उपयोग करके
निम्न कमांड के साथ अंतर्निहित ROM बूटलोडर का उपयोग करके फर्मवेयर को फ्लैश करें:```
python3 cc2538-bsl.py -p /dev/ttyUSB0 --bootloader-sonoff-usb -ewv sniffle_cc1352p1_cc2652p1.hex
10 जनवरी 2025 तक, cc2538-bsl में एक बग है जो फ्लैश करने के बाद Sonoff डोंगल में CC2562P चिप को रीसेट होने से रोकता है। इसका समाधान पुल रिक्वेस्ट 173 में है, जिसे अभी तक मर्ज नहीं किया गया है। इस बीच, पुल रिक्वेस्ट के मर्ज होने की प्रतीक्षा करते हुए, आप मेरे फोर्क का उपयोग कर सकते हैं: https://github.com/sultanqasim/cc2538-bsl।
2022 में, COVID-19 महामारी के कारण चिप की कमी के चलते, कुछ Sonoff CC2652P डोंगल CP2102 (गैर-N) USB/UART ब्रिज चिप्स के साथ बनाए गए थे, जो 921600 बॉड पर सीमित हैं। यदि आपके पास इनमें से एक है, तो आपको एक अलग फर्मवेयर इमेज फ्लैश करने की आवश्यकता होगी जो 921600 की धीमी बॉड दर का उपयोग करती है। यह विशेष धीमी बॉड दर बिल्ड sniffle_cc1352p1_cc2652p1_1M.hex (बिल्ड वैरिएंट CC2652P1F_1M) नाम से जानी जाती है। आपको Sniffle उपयोगिताओं को 2000000 की डिफ़ॉल्ट बॉड दर को ओवरराइड करने के लिए -b 921600 विकल्प के साथ भी चलाना होगा।
चेतावनी: बूटलोडर का उपयोग करके गलत बिल्ड वैरिएंट फ्लैश न करें, अन्यथा आप डिवाइस को ब्रिक करने और बूटलोडर से स्वयं को लॉक आउट करने का जोखिम उठाते हैं। Sonoff CC2652P डिवाइसों के लिए, 921600 बॉड दर के लिए sniffle_cc1352p1_cc2652p1.hex फ़ाइल (CC2652P1F बिल्ड वैरिएंट) या sniffle_cc1352p1_cc2652p1_1M.hex फ़ाइल (CC2652P1F_1M` बिल्ड वैरिएंट) का उपयोग करें। यदि आप गलत वैरिएंट फ्लैश करते हैं और बूटलोडर से लॉक आउट हो जाते हैं, तो JTAG/SWD का उपयोग करके डिवाइस को पुनर्प्राप्त करना संभव हो सकता है।
Electronic Cats फर्मवेयर लोड करने के लिए Catnip Uploader टूल प्रदान करता है। विस्तृत जानकारी के लिए, रिपॉजिटरी देखें। टूल डाउनलोड करें और इन कमांड्स का पालन करें:```bash
[ec@sniffle]$ git clone https://github.com/ElectronicCats/CatSniffer-Tools.git [ec@sniffle]$ cd CatSniffer-Tools/catnip_uploader [ec@sniffle]$ pip install -r requirements.txt
[ec@sniffle]$ python3 catnip_uploader.py releases [INFO] Fetching assets from https://api.github.com/repos/ElectronicCats/CatSniffer-Firmware/releases/latest [INFO] Release: board-v3.x-v1.1.0 [INFO] Fetching assets from https://api.github.com/repos/nccgroup/Sniffle/releases/latest [INFO] Release: v1.10.0 [INFO] Found local release: releases_board-v3.x-v1.1.0 [SUCCESS] Local release is up to date: board-v3.x-v1.1.0 [SUCCESS] Available releases: 0: sniffer_fw_CC1352P_7_v1.10.hex 1: airtag_scanner_CC1352P_7_v1.0.hex 2: nccgroup_v1.10.0_sniffle_cc1352p7_1M.hex 3: airtag_spoofer_CC1352P_7_v1.0.hex 4: sniffle_CC1352P_7_v1.7.hex
[ec@sniffle]$ python3 catnip_uploader.py load 2 COMPORT
आपको अपने बोर्ड के लिए उपयुक्त पथ में *COMPORT* बदलना होगा।
`python3 catnip_uploader.py load 2 COMPORT` कमांड का उपयोग करके, आप
`2: nccgroup_v1.10.0_sniffle_cc1352p7_1M.hex` फर्मवेयर लोड करेंगे।
**फर्मवेयर लोड करने के लिए CatSniffer V3 को SerialPassthroughwithboot की आवश्यकता होती है**।
**चेतावनी:** बूटलोडर का उपयोग करके गलत बिल्ड वैरिएंट फ्लैश न करें, अन्यथा आप
डिवाइस को ब्रिक करने और बूटलोडर से स्वयं को लॉक आउट करने का जोखिम उठाते हैं। यदि आप
फर्मवेयर लाने और स्थापित करने के लिए `catnip_uploader.py` स्क्रिप्ट का उपयोग करते हैं, तो यह
केवल संगत फर्मवेयर प्रस्तुत करेगा। हालाँकि, यदि आप फर्मवेयर को मैन्युअल रूप से संकलित और स्थापित
करना चुनते हैं, तो सुनिश्चित करें कि आप सही बिल्ड वैरिएंट का उपयोग करें। CatSniffer
v3 डिवाइसों के लिए, `sniffle_cc1352p7_1M.hex` फ़ाइल (`CC1352P74_1M` बिल्ड वैरिएंट) का उपयोग करें।
CatSniffer v1.x/v2.x डिवाइस एक अलग चिप वैरिएंट (CC1352P1) का उपयोग करते हैं जिसके लिए एक
अलग फर्मवेयर बिल्ड की आवश्यकता होती है (`CC1352P1F3_1M` वैरिएंट, `sniffle_cc1352p1_cc2652p1_1M.hex`
इमेज)। Sniffle का परीक्षण CatSniffer v1.x/v2.x डिवाइसों पर नहीं किया गया है, लेकिन वे
संभवतः काम करेंगे जब तक आप उपयुक्त बिल्ड वैरिएंट फ्लैश करते हैं। यदि आप गलत
वैरिएंट फ्लैश करते हैं और बूटलोडर से स्वयं को लॉक आउट कर लेते हैं, तो JTAG/SWD का उपयोग करके डिवाइस को पुनर्प्राप्त करना संभव हो सकता है।
## Sniffer उपयोग```
[skhan@serpent python_cli]$ ./sniff_receiver.py --help
usage: sniff_receiver.py [-h] [-s SERPORT] [-b BAUDRATE] [-c {37,38,39}] [-p] [-r RSSI]
[-m MAC] [-i IRK] [-S STRING] [-a] [-A] [-e] [-H] [-l] [-q]
[-Q PRELOAD] [-n] [-C] [-d] [-o OUTPUT]
Host-side receiver for Sniffle BLE5 sniffer
options:
-h, --help show this help message and exit
-s SERPORT, --serport SERPORT
Sniffer serial port name
-b BAUDRATE, --baudrate BAUDRATE
Sniffer serial port baud rate
-c {37,38,39}, --advchan {37,38,39}
Advertising channel to listen on
-p, --pause Pause sniffer after disconnect
-r RSSI, --rssi RSSI Filter packets by minimum RSSI
-m MAC, --mac MAC Filter packets by advertiser MAC
-i IRK, --irk IRK Filter packets by advertiser IRK
-S STRING, --string STRING
Filter for advertisements containing the specified string
-a, --advonly Passive scanning, don't follow connections
-A, --scan Active scanning, don't follow connections
-e, --extadv Capture BT5 extended (auxiliary) advertising
-H, --hop Hop primary advertising channels in extended mode
-l, --longrange Use long range (coded) PHY for primary advertising
-q, --quiet Don't display empty packets
-Q PRELOAD, --preload PRELOAD
Preload expected encrypted connection parameter changes
-n, --nophychange Ignore encrypted PHY mode changes
-C, --crcerr Capture packets with CRC errors
-d, --decode Decode advertising data
-o OUTPUT, --output OUTPUT
PCAP output file name
लॉन्चपैड बोर्डों पर XDS110 डीबगर दो सीरियल पोर्ट बनाता है। लिनक्स पर,
उन्हें आमतौर पर ttyACM0 और ttyACM1 नाम दिया जाता है। बनाए गए दो सीरियल
पोर्टों में से पहला पोर्ट Sniffle के साथ संचार करने के लिए उपयोग होता है।
डिफ़ॉल्ट रूप से, Python CLI, TI XDS110 USB VID:PID कॉम्बो से मेल खाने वाला
पहला CDC-ACM डिवाइस देखते ही उससे संचार करती है, या फिर पहला Sonoff डोंगल देखती है।
यदि आप एक अलग USB सीरियल एडाप्टर उपयोग कर रहे हैं, तो आपको -s कमांड
लाइन विकल्प के साथ इसे ओवरराइड करने की आवश्यकता हो सकती है या अतिरिक्त USB CDC-ACM डिवाइस कनेक्टेड हैं।
-r (RSSI फ़िल्टर) विकल्प के लिए, -40 का मान अच्छा काम करता है यदि
स्निफर ट्रांसमिट करने वाले डिवाइस के बहुत पास या लगभग छूता हुआ हो। RSSI
फ़िल्टर व्यस्त RF वातावरण में अप्रासंगिक विज्ञापनों को अनदेखा करने के लिए बहुत
उपयोगी है। RSSI फ़िल्टर केवल विज्ञापनों को कैप्चर करते समय सक्रिय रहता है,
क्योंकि आप हमेशा फॉलो किए जा रहे कनेक्शन के लिए डेटा चैनल ट्रैफ़िक कैप्चर
करना चाहते हैं। आप शायद MAC फ़िल्टरिंग सक्रिय होने पर RSSI फ़िल्टर का उपयोग नहीं
करना चाहेंगे, क्योंकि RSSI बहुत कम होने पर आप रुचि के MAC पते से आने वाले
विज्ञापन खो सकते हैं।
विज्ञापनों के साथ hop करने और विश्वसनीय कनेक्शन स्निफिंग के लिए, आपको
-m विकल्प के साथ MAC फ़िल्टर सेट करना होगा। आपको परिधीय डिवाइस का
MAC पता निर्दिष्ट करना चाहिए, केंद्रीय डिवाइस का नहीं। यह पता लगाने के लिए
कि किस MAC पते को स्निफ करना है, आप स्निफर को लक्ष्य के पास रखते हुए RSSI
फ़िल्टरिंग के साथ स्निफर चला सकते हैं। यह आपको लक्ष्य डिवाइस से आने वाले
विज्ञापन दिखाएगा जिसमें उसका MAC पता भी शामिल होगा। यह ध्यान दिया जाना चाहिए
कि कई BLE डिवाइस लेबल पर लिखे अपने "वास्तविक" निश्चित MAC के बजाय
यादृच्छिक MAC पते के साथ विज्ञापन करते हैं।
अधिकांश नए BLE डिवाइस Resolvable Private Addresses (RPAs) का उपयोग करते हैं, निश्चित
स्थैतिक या सार्वजनिक पतों के बजाय। जबकि आप किसी विशेष RPA के लिए MAC फ़िल्टर सेट कर सकते हैं,
डिवाइस समय-समय पर अपना RPA बदलते हैं। यदि Identity Resolving Key (IRK) ज्ञात हो, तो
RPAs को रिज़ॉल्व किया जा सकता है (किसी विशेष डिवाइस से संबद्ध)। Sniffle
IRK प्रदान किए जाने पर स्वचालित RPA रिज़ॉल्यूशन का समर्थन करता है। इससे बचाव होता है
RPA बदलने पर हर बार MAC फ़िल्टर अपडेट करने की आवश्यकता से। आप Sniffle के लिए एक
IRK -i विकल्प के साथ निर्दिष्ट कर सकते हैं; IRK को हेक्साडेसिमल प्रारूप में,
सबसे महत्वपूर्ण बाइट (MSB) पहले, प्रदान किया जाना चाहिए। IRK निर्दिष्ट करने से
Sniffle उसी तरह किसी विज्ञापनकर्ता के साथ channel hop कर सकता है जैसे वह MAC फ़िल्टर के साथ करता है।
IRK आधारित MAC फ़िल्टरिंग सुविधा (-i) स्थैतिक MAC फ़िल्टरिंग सुविधा (-m) के साथ
परस्पर अनन्य है।
एक सुविधा यह भी है जो स्वचालित रूप से उस विज्ञापनकर्ता का MAC पता पहचानती है
जिसके विज्ञापन या स्कैन प्रतिक्रिया में एक निर्दिष्ट स्ट्रिंग (बाइट्स की श्रृंखला) होती है।
यह उन RPAs वाले डिवाइसों के लिए उपयोगी है जहाँ IRK अज्ञात है,
लेकिन विज्ञापन में पहचान के लिए पर्याप्त अद्वितीय स्थैतिक स्ट्रिंग मौजूद होती है।
यह सुविधा -S विकल्प का उपयोग करती है, जिसमें स्ट्रिंग को मानक escape अनुक्रमों
के साथ निर्दिष्ट किया जाता है। उदाहरण के लिए, ऐसे विज्ञापनकर्ता की खोज करने के लिए जिसके
विज्ञापन में हेक्स बाइट अनुक्रम DE AD BE EF है, निर्दिष्ट करें
-S "\xDE\xAD\xBE\xEF"। "hello" स्ट्रिंग वाले विज्ञापनकर्ता की खोज के लिए,
बस -S "hello" निर्दिष्ट करें। जब स्ट्रिंग खोज सुविधा का उपयोग किया जाता है, तो प्रारंभ में
सभी MAC पते स्वीकार किए जाएंगे जब तक कि खोज स्ट्रिंग वाला विज्ञापन नहीं मिल जाता।
उसके बाद, संबंधित विज्ञापनकर्ता के MAC पते के साथ एक MAC फ़िल्टर सेट किया जाएगा,
और कोई भी RSSI फ़िल्टर स्वचालित रूप से अक्षम कर दिया जाएगा।
Bluetooth 5 विस्तारित विज्ञापन में सहायक पॉइंटर्स का अनुसरण सक्षम करने के लिए,
-e विकल्प सक्षम करें। विस्तारित विज्ञापन कैप्चर में प्रदर्शन और विश्वसनीयता सुधारने हेतु,
यह विकल्प प्राथमिक विज्ञापन चैनलों पर hopping को अक्षम करता है,
भले ही MAC फ़िल्टर सेट किया गया हो। यदि आप अनिश्चित हैं कि कनेक्शन
legacy या विस्तारित विज्ञापन के माध्यम से स्थापित होगा, तो आप
-H फ़्लैग को -e के साथ सक्षम कर सकते हैं, ताकि प्राथमिक चैनल पर
legacy विज्ञापनों के साथ hopping की जा सके, और विस्तारित विज्ञापन
सहायक पैकेटों को निर्धारित रूप से सुना जा सके। -e और -H को संयोजित करते समय,
कनेक्शन का पता लगाने की विश्वसनीयता अकेले प्राथमिक (legacy) या द्वितीयक (विस्तारित)
विज्ञापन चैनलों पर hopping की तुलना में कम हो सकती है।
प्राथमिक विज्ञापन चैनलों पर long range PHY को स्निफ करने के लिए, -l विकल्प
निर्दिष्ट करें। ध्यान दें कि long range मोड में प्राथमिक विज्ञापन चैनलों के बीच कोई hopping समर्थित नहीं है,
क्योंकि सभी long range विज्ञापन BT5 विस्तारित तंत्र का उपयोग करते हैं।
विस्तारित तंत्र के अंतर्गत, तीनों प्राथमिक चैनलों पर सहायक पॉइंटर्स
एक ही सहायक पैकेट की ओर इंगित करते हैं, इसलिए प्राथमिक चैनलों के बीच hopping
आवश्यक नहीं है।
कनेक्शन का अनुसरण करते समय खाली डेटा पैकेट स्क्रीन पर प्रिंट न करने के लिए,
-q फ़्लैग का उपयोग करें। इससे वास्तविक समय में अर्थपूर्ण संचार देखना आसान हो जाता है,
लेकिन कनेक्शन अनुसरण के अस्थिर या खो जाने पर इसे समझना मुश्किल हो सकता है।
एन्क्रिप्टेड कनेक्शनों के लिए, Sniffle कनेक्शन पैरामीटर अपडेट का पता लगाने का समर्थन करता है,
भले ही एन्क्रिप्शन कुंजी अज्ञात हो, और यह नए पैरामीटरों को मापने का प्रयास करता है।
हालाँकि, यदि आप एन्क्रिप्टेड कनेक्शन पैरामीटर अपडेट में अपेक्षित नए कनेक्शन अंतराल और Instant
delta जानते हैं, तो आप उन्हें प्रदर्शन/विश्वसनीयता सुधारने के लिए
--preload/-Q विकल्प के साथ निर्दिष्ट कर सकते हैं।
अपेक्षित Interval:DeltaInstant जोड़ी को colon से अलग किए गए पूर्णांकों के रूप में दिया जाना चाहिए।
Interval एक पूर्णांक है जो 1.25 ms के गुणकों को दर्शाता है (जैसा कि
LL_CONNECTION_UPDATE_IND में परिभाषित है)। DeltaInstant कनेक्शन ईवेंट की संख्या है,
जो कनेक्शन अपडेट पैकेट प्रसारित होने और नए पैरामीटर लागू होने के बीच होती है।
DeltaInstant, केंद्रीय डिवाइसों के लिए Bluetooth विनिर्देश की आवश्यकताओं के अनुसार
6 से अधिक या बराबर होना चाहिए।
यदि कई एन्क्रिप्टेड पैरामीटर अपडेट की उम्मीद है, तो आप अल्पविराम से अलग किए गए
कई पैरामीटर जोड़े प्रदान कर सकते हैं (जैसे 6:7,39:8)। यदि आपके पास ऐसा डिवाइस है जो
ऐसे एन्क्रिप्टेड PHY अपडेट PDUs जारी करता है जो PHY नहीं बदलते, या बिना किसी PHY परिवर्तन के
एन्क्रिप्टेड LE पावर कंट्रोल PDUs भेजता है, तो आप --nophychange/-n
विकल्प का उपयोग कर सकते हैं।
स्निफर को रोकने के लिए, Ctrl-C दबाएँ।
यदि किसी कारण से स्निफर फर्मवेयर लॉक हो जाता है और फ़िल्टर अक्षम होने पर भी कोई ट्रैफ़िक कैप्चर करने से इनकार करता है, तो आपको स्निफर MCU को रीसेट करना चाहिए। लॉन्चपैड बोर्डों पर, रीसेट बटन माइक्रो USB पोर्ट के बगल में स्थित है।
usage: scanner.py [-h] [-s SERPORT] [-b BAUDRATE] [-c {37,38,39}] [-r RSSI] [-l] [-d] [-o OUTPUT]
Scanner utility for Sniffle BLE5 sniffer
options: -h, --help show this help message and exit -s SERPORT, --serport SERPORT Sniffer serial port name -b BAUDRATE, --baudrate BAUDRATE Sniffer serial port baud rate -c {37,38,39}, --advchan {37,38,39} Advertising channel to listen on -r RSSI, --rssi RSSI Filter packets by minimum RSSI -l, --longrange Use long range (coded) PHY for primary advertising -d, --decode Decode advertising data -o OUTPUT, --output OUTPUT PCAP output file name
स्कैनर कमांड लाइन तर्क स्निफ़र के समान कार्य करते हैं। स्कैनर उपयोगिता का उद्देश्य आस-पास के उन डिवाइसों की सूची एकत्र करना है जो विज्ञापन (advertising) कर रहे हैं, और देखे गए डिवाइसों के लिए सक्रिय रूप से स्कैन अनुरोध जारी करना है, बिना उस तेज़ी से स्क्रॉल होने वाले डेटा के जो स्निफ़र उपयोगिता से मिलता है। हार्डवेयर/फर्मवेयर एक सक्रिय स्कैनिंग मोड में प्रवेश करेगा जहाँ यह प्राप्त विज्ञापनों की रिपोर्ट करेगा, स्कैन करने योग्य विज्ञापनों के लिए स्कैन अनुरोध जारी करेगा, और प्राप्त स्कैन प्रतिक्रियाओं की रिपोर्ट करेगा। स्कैनर उपयोगिता देखे गए MAC पतों को केवल एक बार रिकॉर्ड और रिपोर्ट करेगी, बिना डिस्प्ले को स्पैम किए। एक बार जब आप विज्ञापन कैप्चर करना समाप्त कर लें, तो स्कैनिंग रोकने और परिणाम रिपोर्ट करने के लिए Ctrl-C दबाएँ। स्कैनर प्रत्येक लक्ष्य से अंतिम विज्ञापन और स्कैन प्रतिक्रिया दिखाएगा। स्कैन परिणाम RSSI के अनुसार अवरोही क्रम में क्रमबद्ध किए जाएँगे।
## उपयोग उदाहरण
चैनल 38 पर सभी विज्ञापनों को स्निफ़ करें, RSSI < -50 को अनदेखा करें, CONNECT\_REQs दिखाई देने पर भी विज्ञापन चैनल पर बने रहें।```
./sniff_receiver.py -c 38 -r -50 -a
MAC 12:34:56:78:9A:BC से विज्ञापनों को स्निफ़ करें, विज्ञापन चैनल पर बने रहें
भले ही CONNECT_REQs देखे जाएँ, विज्ञापनों को data1.pcap में सहेजें।```
./sniff_receiver.py -m 12:34:56:78:9A:BC -a -o data1.pcap
पहले MAC पते के लिए विज्ञापनों और कनेक्शनों को स्निफ़ करें जो RSSI >= -40 के साथ देखा गया हो। MAC पते पर लॉक होने के बाद RSSI फ़िल्टर स्वचालित रूप से अक्षम कर दिया जाएगा। कैप्चर किए गए डेटा को `data2.pcap` में सहेजें।```
./sniff_receiver.py -m top -r -40 -o data2.pcap
पेरिफेरल से बिग एंडियन IRK 4E0BEA5355866BE38EF0AC2E3F0EBC22 के साथ विज्ञापनों और कनेक्शनों को स्निफ़ करें. दो अपेक्षित एन्क्रिप्टेड कनेक्शन पैरामीटर अपडेट; पहला जिसका Interval 6 है, जो एन्क्रिप्टेड LL_CONNECTION_UPDATE_IND के स्निफर द्वारा देखे जाने के 6 कनेक्शन इवेंट्स बाद एक इंस्टेंट 6 पर घटित होता है. दूसरे अपेक्षित एन्क्रिप्टेड कनेक्शन अपडेट का Interval 39 है, और DeltaInstant भी 6 है.``` ./sniff_receiver.py -i 4E0BEA5355866BE38EF0AC2E3F0EBC22 -Q 6:6,39:6
आस-पास (RSSI >= -55) के डिवाइसों से BT5 विस्तारित विज्ञापनों और कनेक्शनों को स्निफ़ करें।```
./sniff_receiver.py -r -55 -e
निर्दिष्ट MAC पते वाले डिवाइस से लीगेसी और विस्तारित विज्ञापनों तथा कनेक्शनों को स्निफ़ करें। कैप्चर किए गए डेटा को data3.pcap में सहेजें।```
./sniff_receiver.py -eH -m 12:34:56:78:9A:BC -o data3.pcap
चैनल 38 पर लॉन्ग रेंज प्राइमरी PHY का उपयोग करके विस्तारित विज्ञापनों और कनेक्शनों को स्निफ़
करें।```
./sniff_receiver.py -le -c 38
चैनल 39 पर -50 से अधिक RSSI वाले विज्ञापनों के लिए सक्रिय रूप से स्कैन करें।``` ./scanner.py -c 39 -r -50
## Obtaining the IRK
यदि आपके पास रूट किया हुआ Android फ़ोन है, तो आप Bluedroid कॉन्फ़िगरेशन फ़ाइल में IRKs (और LTKs) पा सकते हैं। Android 8.1 पर, यह `/data/misc/bluedroid/bt_config.conf` पर स्थित होती है। `LE_LOCAL_KEY_IRK` Android डिवाइस के अपने IRK को निर्दिष्ट करता है, और फ़ाइल में प्रत्येक बॉन्डेड डिवाइस के लिए `LE_KEY_PID` के पहले 16 बाइट्स उस बॉन्डेड डिवाइस के IRK को दर्शाते हैं। ध्यान रखें कि इस फ़ाइल में संग्रहीत कुंजियाँ लिटिल एंडियन होती हैं, इसलिए **इस फ़ाइल में कुंजियों का बाइट क्रम उलटना होगा।** उदाहरण के लिए, लिटिल एंडियन IRK 22BC0E3F2EACF08EE36B865553EA0B4E को Sniffle को `-i` विकल्प के साथ पास करते समय 4E0BEA5355866BE38EF0AC2E3F0EBC22 (बिग एंडियन) में बदलना होगा।
आप डिवाइस को रूट किए बिना Android या iOS पर कैप्चर किए गए HCI Snoop लॉग के माध्यम से भी IRK और LTK पा सकते हैं:
* Android: <https://novelbits.s3.us-east-2.amazonaws.com/Developer+Guides/Android+Bluetooth+Debugging+Guide.pdf>
* iOS: <https://novelbits.s3.us-east-2.amazonaws.com/Developer+Guides/iOS+Bluetooth+Debugging+Guide.pdf>
## Wireshark Plugin
Sniffle में एक Wireshark प्लगइन शामिल है जो 'Sniffle' कैप्चर इंटरफ़ेस का चयन करके Wireshark GUI से स्वचालित रूप से Sniffle लॉन्च करना संभव बनाता है।
Sniffle प्लगइन स्थापित करने के लिए, पहले 'About Wireshark' डायलॉग में अपने Personal Extcap फ़ोल्डर का स्थान खोजें (*Help* > *About Wireshark* > *Folders* > *Personal Extcap path*)। Wireshark के हाल के संस्करणों (4.2.0+) चलाने वाले POSIX (Linux और Mac OS) सिस्टम पर, यह फ़ोल्डर `~/.local/lib/wireshark/extcap` पर स्थित होता है। Windows के अंतर्गत, यह `%USERPROFILE%\AppData\Roaming\Wireshark\extcap` पर पाया जा सकता है।
POSIX सिस्टम पर, आप Sniffle extcap प्लगइन को Wireshark के पर्सनल extcap निर्देशिका में सिर्फ़ सिमलिंक कर सकते हैं:```
mkdir -p ~/.local/lib/wireshark/extcap
ln -s $(pwd)/python_cli/sniffle_extcap.py ~/.local/lib/wireshark/extcap
Mac OS पर, Wireshark आपके शेल प्रोफ़ाइल द्वारा निर्दिष्ट PATH में मौजूद Python के बजाय Xcode Python का उपयोग करने का प्रयास कर सकता है। इस प्रकार, यदि Xcode Python के लिए PySerial स्थापित नहीं है, तो Sniffle प्लगइन extcap इंटरफ़ेस में दिखाई नहीं दे सकता है। इसे ठीक करने के लिए, आप sniffle_extcap.py की शेबांग लाइन को संपादित करके सीधे उस Python की ओर इंगित कर सकते हैं जिसमें PySerial स्थापित है, उदाहरण के लिए Homebrew Python /opt/homebrew/bin/python3, बजाय /usr/bin/env python3 के।
Windows पर, आप python_cli निर्देशिका से निम्न फ़ाइलों और निर्देशिकाओं को अपने Personal Extcap फ़ोल्डर में कॉपी कर सकते हैं:```
sniffle/
sniffle_extcap.py
sniffle_extcap.bat
विंडोज़ पर, पायथन इंटरप्रेटर का स्थान निर्दिष्ट करने के लिए `sniffle_extcap.bat` को संपादित करना आवश्यक हो सकता है,
यदि इंस्टॉलेशन निर्देशिका PATH में शामिल नहीं है, उदाहरण के लिए:```
@echo off
C:\my_python_install\python.exe "%~dp0sniffle_extcap.py" %*
Once the plugin has been installed, restart Wireshark or choose Capture > Refresh Interfaces to enable the Sniffle interface.
जबकि मूल 2019 Sniffle फर्मवेयर विशुद्ध रूप से एक निष्क्रिय श्रोता था, बाद के फर्मवेयर संस्करणों ने विभिन्न तरीकों से सक्रिय रूप से पैकेट संचारित करने के लिए कई सुविधाएँ जोड़ीं। वर्तमान Sniffle फर्मवेयर GAP सेंट्रल और पेरिफेरल डिवाइस दोनों के रूप में कार्य करने का समर्थन करता है, जिसमें सक्रिय स्कैनिंग, लीगेसी और एक्सटेंडेड एडवरटाइज़िंग, कनेक्शन आरंभ करना, और सेंट्रल या पेरिफेरल भूमिका में कनेक्टेड होना शामिल है। scanner.py स्क्रिप्ट सक्रिय स्कैनिंग करती है। initiator.py स्क्रिप्ट किसी पेरिफेरल से कनेक्शन आरंभ करती है और फिर एक कनेक्टेड सेंट्रल के रूप में कार्य करती है। advertiser.py स्क्रिप्ट लीगेसी एडवरटाइज़िंग करती है और अन्य डिवाइसों से कनेक्शन अनुरोध स्वीकार करती है, जिससे वह कनेक्टेड पेरिफेरल भूमिका में स्थानांतरित हो जाती है।
Sniffle की ट्रांसमिट कार्यक्षमता पारंपरिक HCI-आधारित ब्लूटूथ नियंत्रक से थोड़ी भिन्न है, क्योंकि यह आपको लिंक लेयर पर भेजे जा रहे सटीक PDU पर बहुत निम्न-स्तरीय नियंत्रण देती है। यह निम्न-स्तरीय नियंत्रण होस्ट-साइड कोड को अतिरिक्त कार्यक्षमता लागू करने की अनुमति देता है, जैसे लिंक लेयर फ़ज़ टेस्टिंग या लिंक लेयर रिले हमले।
मैंने अभी तक Sniffle फर्मवेयर के API को औपचारिक रूप से प्रलेखित करने का समय नहीं लिया है, हालाँकि sniffle_hw.py में इसके होस्ट-साइड कार्यान्वयन को देखने पर यह काफी स्व-व्याख्यात्मक है। सक्रिय स्कैनिंग (जो स्कैन अनुरोध संचारित करती है) cmd_scan द्वारा सक्रिय की जाती है। कनेक्शन आरंभ cmd_connect द्वारा ट्रिगर होता है, हालाँकि initiate_conn रैपर का उपयोग करना सबसे आसान है। विज्ञापन (वैकल्पिक रूप से कनेक्टेबल) लीगेसी एडवरटाइज़िंग के लिए cmd_advertise, या एक्सटेंडेड एडवरटाइज़िंग के लिए cmd_advertise_ext द्वारा सक्रिय किया जाता है।
चूंकि मध्य-2024 में TI समस्या EXT_EP-11735 के ठीक होने के बाद से, XDS110 डिबगर (TI Launchpad बोर्डों पर शामिल) 2M जैसी उच्च बॉड दरों को (जैसा कि Sniffle द्वारा उपयोग किया जाता है) अत्यधिक विलंबता के बिना उचित तरीके से संभालता है। हालाँकि, नवीनतम XDS110 फर्मवेयर अभी भी ऐसी बॉड दरों पर UART का बफर्ड DMA-संचालित संचालन उपयोग करता है, और इस प्रकार अभी भी 30 ms तक विलंबता उत्पन्न कर सकता है। यह विलंबता स्निफर के रूप में उपयोग के लिए महत्वहीन है, लेकिन अधिक सक्रिय संचालन जैसे कि GATT क्लाइंट या सर्वर के रूप में कार्य करने वाला होस्ट-साइड कोड, या रिले हमलों को निष्पादित करने के लिए हानिकारक हो सकती है। इंटरप्ट-आधारित संचालन के लिए नीचे वर्णित XDS110 फर्मवेयर संस्करण 3.0.0.28 का संशोधन ऐसे समय-संवेदनशील संचालन के लिए विलंबता को अभी भी काफी हद तक कम कर सकता है। नवीनतम XDS110 फर्मवेयर में समान संशोधन करना संभव होना चाहिए, लेकिन मैंने इसे रिवर्स इंजीनियर करने और बदलने के लिए सही बिट्स खोजने का समय नहीं लिया है।
मध्य-2024 और उससे पहले, TI XDS110 डिबगर (Launchpad बोर्डों पर शामिल) के फर्मवेयर में अपने USB से UART ब्रिज में एक अवांछनीय व्यवहार था, जहाँ उच्च बॉड दरों पर गंभीर विलंबता हो सकती थी, विशेष रूप से Sniffle फर्मवेयर द्वारा किए जाने वाले लगातार छोटे लेखन के साथ। यह समस्या वर्षों से मौजूद थी, और अप्रैल 2024 में UniFlash 8.6.0 के साथ बंडल किए गए XDS110 फर्मवेयर 3.0.0.28 में अभी भी मौजूद थी। मूल कारण यह था कि DMA-आधारित संचालन में, XDS110 फर्मवेयर UART डेटा को एक बफर में एकत्र करता था जिसका आकार बॉड दर के अनुपात में होता था, और डेटा स्थानांतरित करने से पहले इस बफर के भरने की प्रतीक्षा करता था। इस बफर को फ्लश करने के लिए तर्क था यदि पिछले 15 मिलीसेकंड में कोई नया डेटा नहीं आया, लेकिन यह फ्लशिंग तर्क कभी ट्रिगर नहीं हुआ जब Sniffle हर कुछ मिलीसेकंड में कनेक्शन घटनाओं से छोटे पैकेट बार-बार जोड़ रहा था। इस उप-इष्टतम व्यवहार के परिणामस्वरूप, स्निफ़ किया गया डेटा होस्ट पर विलंबित बर्स्ट में दिखाई दे सकता था।
XDS110 फर्मवेयर में UART संचालन के लिए एक वैकल्पिक मोड भी है, जहाँ प्रत्येक UART रिसीव एक इंटरप्ट ट्रिगर करता है जिसके परिणामस्वरूप डेटा तुरंत होस्ट को भेज दिया जाता है। संचालन का यह इंटरप्ट-आधारित मोड बहुत कम विलंबता रखता है। हालाँकि, फर्मवेयर इसका उपयोग केवल 230400 से नीचे की बॉड दरों के लिए करता है। बार-बार छोटे डेटा खंडों के साथ DMA मोड संचालन की उच्च विलंबता के समाधान के रूप में, आप उच्च बॉड दरों (जैसे Sniffle द्वारा उपयोग किए जाने वाले 2M बॉड) पर भी इंटरप्ट-आधारित USB-UART ब्रिजिंग का उपयोग करने के लिए फर्मवेयर को संशोधित कर सकते हैं। फर्मवेयर 3.0.0.28 (Uniflash 8.6.0 के साथ शामिल) में, आप ऑफ़सेट 0x0A14 पर बाइट्स को 61 3F से 00 1F में हेक्स एडिट कर सकते हैं। यह DMA-आधारित UART संचालन पर स्विच करने के लिए बॉड दर को 230400 से बदलकर 0x200000 (2097152) कर देगा।
ध्यान रखें कि ऊपर वर्णित ऑफ़सेट और बाइट संशोधन केवल फर्मवेयर 3.0.0.28 के लिए हैं, और विभिन्न फर्मवेयर संस्करणों के लिए अलग होंगे। अपने डिबगर पर अमान्य फर्मवेयर फ्लैश करने से यह क्षतिग्रस्त हो सकता है, और किसी भी क्षति के लिए हम कोई जिम्मेदारी नहीं लेते हैं जो हो सकती है।
उच्च बॉड दरों पर कम विलंबता UART के लिए XDS110 फर्मवेयर को संशोधित करने हेतु Linux पर निम्नलिखित कमांड का उपयोग किया जा सकता है:``` cd ~/ti/uniflash_8.6.0/deskdb/content/TICloudAgent/linux/ccs_base/common/uscif/xds110/ cp firmware_3.0.0.28.bin firmware_3.0.0.28_fastuart.bin printf '\x00\x1f' | dd of=firmware_3.0.0.28_fastuart.bin bs=1 seek=$((0x0A14)) conv=notrunc sha256sum firmware_3.0.0.28_fastuart.bin
फ्लैश करने से पहले, सत्यापित करें कि संशोधित फर्मवेयर की SHA256 सम है
`c226f2e9cb2b9f0bc111ca11f2903d58d4065293468623428c0e8eeb22086dcf`। इसे सत्यापित करने के बाद,
संशोधित XDS110 डिबगर फर्मवेयर को फ्लैश करने के लिए निम्नलिखित कमांड चलाएँ:```
./xdsdfu -m
./xdsdfu -f firmware_3.0.0.28_fastuart.bin -r
Sniffle का उपयोग ब्लूटूथ LE ट्रैफिक के लिंक-लेयर रिलेइंग को करने के लिए किया जा सकता है। रिलेइंग करते समय, एक Sniffle डिवाइस BLE सेंट्रल के रूप में कार्य करता है (relay_master.py का उपयोग करके) और दूसरा Sniffle डिवाइस BLE पेरिफेरल के रूप में कार्य करता है (relay_slave.py का उपयोग करके)। मास्टर और स्लेव क्रमशः BLE सेंट्रल और पेरिफेरल के लिए ऐतिहासिक शब्द हैं। रिले मास्टर वास्तविक पेरिफेरल से advertising और स्कैन रिस्पॉन्स डेटा कैप्चर करता है, फिर इसे रिले स्लेव को पास करता है। रिले स्लेव वास्तविक पेरिफेरल की नकल करते हुए advertisements और स्कैन रिस्पॉन्स प्रसारित करता है और कनेक्शन स्वीकार करता है। कनेक्शन स्वीकार करने पर, रिले स्लेव रिले मास्टर को सूचित करता है, जो फिर वास्तविक पेरिफेरल से कनेक्शन शुरू करता है। इस बिंदु से आगे, सभी लिंक लेयर पैकेट रिले मास्टर और स्लेव के बीच अग्रेषित किए जाते हैं।
रिले मास्टर स्क्रिप्ट लेटेंसी कम करने के लिए रिले के एक या दोनों तरफ तेज़ कनेक्शन अंतराल का अनुरोध करने की कार्यक्षमता प्रदान करती है। यदि XDS110 को USB/UART ब्रिज के रूप में उपयोग कर रहे हैं, तो ध्यान रखें कि XDS110 फर्मवेयर रिले में अतिरिक्त लेटेंसी पेश करता है, जब तक कि आप इसे ऊपर वर्णित अनुसार संशोधित नहीं करते।
कृपया ध्यान दें कि रिले मास्टर स्क्रिप्ट एक नेटवर्क लिसनर बनाती है जो सभी इंटरफेस (0.0.0.0) से बंधता है, और रिलेइंग डिवाइसों के बीच संचार के लिए उपयोग किया जाने वाला नेटवर्क प्रोटोकॉल कोई सुरक्षा प्रदान नहीं करता है। इन स्क्रिप्ट्स का उपयोग केवल विश्वसनीय नेटवर्क वातावरण में करें।
रिले मास्टर (सेंट्रल) और स्लेव (पेरिफेरल) स्क्रिप्ट्स का उपयोग नीचे दिखाया गया है। वर्तमान में, extended advertising रिले स्क्रिप्ट्स द्वारा समर्थित नहीं है।``` usage: relay_master.py [-h] [-s SERPORT] [-c {37,38,39}] [-m MAC] [-i IRK] [-S STRING] [-P] [-q] [-Q PRELOAD] [-f] [-p] [-F] [-o OUTPUT]
Relay master script for Sniffle BLE5 sniffer
options: -h, --help show this help message and exit -s, --serport SERPORT Sniffer serial port name -c, --advchan {37,38,39} Advertising channel to listen on -m, --mac MAC Specify target MAC address -i, --irk IRK Specify target IRK -S, --string STRING Specify target by advertisement search string -P, --public Supplied MAC address is public -q, --quiet Don't show empty packets -Q, --preload PRELOAD Preload expected encrypted connection parameter changes -f, --fastslave Relay slave should request a fast connection interval -p, --pause Wait for key press on master before relaying -F, --fastmaster Relay master should specify a fast connection interval -o, --output OUTPUT PCAP output file name
आप GitHub Actions के माध्यम से भी स्कैनर चला सकते हैं। नीचे एक नमूना वर्कफ़्लो दिया गया है:```
usage: relay_slave.py [-h] [-s SERPORT] [-M MASTERADDR] [-q]
Relay slave script for Sniffle BLE5 sniffer
options:
-h, --help show this help message and exit
-s, --serport SERPORT
Sniffer serial port name
-M, --masteraddr MASTERADDR
IP address of relay master
-q, --quiet Don't show empty packets