
ब्लूटूथ लो एनर्जी (BLE) पैकेट स्निफर और ट्रांसमीटर, सॉफ्टवेयर डिफाइंड रेडियो (SDR) पर आधारित, मानक और गैर-मानक (रॉ बिट) दोनों प्रकार के लिए।
BTLE एक मुफ़्त और ओपन-सोर्स ब्लूटूथ लो एनर्जी (BLE) सॉफ्टवेयर डिफ़ाइंड रेडियो सॉफ्टवेयर सूट और ओपन BTLE चिप डिज़ाइन है।
इसमें शामिल है:
इस प्रोजेक्ट को चलाने से पहले सुनिश्चित करें कि आपका SDR हार्डवेयर वातावरण (driver/lib) सही ढंग से सेट किया गया है।
git clone https://github.com/JiaoXianjun/BTLE.git
cd BTLE/host
mkdir build
cd build
cmake ../ (डिफ़ॉल्ट। HackRF के लिए)
cmake ../ -DUSE_BLADERF=1 (केवल bladeRF के लिए)
make
./btle-tools/src/btle_rx
उपरोक्त कमांड चैनल 37 पर स्निफ़िंग करता है। यदि आपके आस-पास BLE डिवाइस (फोन/पैड/लैपटॉप) हैं तो आपको स्क्रीन पर कई पैकेट दिखाई देने चाहिए।
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r500
उपरोक्त कमांड ADV चैनल पर डिस्कवरी पैकेट प्रसारित करता है। आपको किसी अन्य BLE स्निफ़र ऐप (जैसे LightBlue) में "SDR/Bluetooth/Low/Energy" नाम का डिवाइस दिखाई देना चाहिए।
HACKRF पर तेज़ ऑपरेशन अनुक्रम के लिए, निम्न का उपयोग करें:
#define TRANSFER_COUNT 4
#define TRANSFER_BUFFER_SIZE 4096
hackrf/host/libhackrf/src/hackrf.c में। फिर HACKRF लिब को पुनः संकलित करें और इसे पुनः स्थापित करें। HACKRF लिब परिवर्तन को लागू करने के लिए BTLE को पुनः संकलित करना न भूलें।
टूल के अलावा, matlab निर्देशिका में एल्गोरिदम मूल्यांकन और अन्य उपयोगी स्क्रिप्ट शामिल हैं
-h --help
सभी तर्क/उपयोग प्रिंट करें।
-c --chan
चैनल नंबर। डिफ़ॉल्ट मान 37 (ADV चैनलों में से एक)। मान्य मान 0~39 (सभी ADV और DATA चैनल)।
-g --gain
Rx लाभ dB में। HACKRF rxvga डिफ़ॉल्ट 6, मान्य 0 - 62। bladeRF डिफ़ॉल्ट अधिकतम rx लाभ 66dB है (मान्य 0 - 66)। आपके परिवेश में सर्वोत्तम प्रदर्शन सुनिश्चित करने के लिए लाभ को बहुत सावधानी से समायोजित किया जाना चाहिए। कम लाभ से परीक्षण शुरू करने का सुझाव दिया जाता है, क्योंकि उच्च लाभ हमेशा गंभीर विरूपण का कारण बनता है और आपको कुछ नहीं देता।
-l --lnaGain
LNA लाभ dB में (केवल HackRF)। डिफ़ॉल्ट 32, मान्य 0 - 40। आपके परिवेश में सर्वोत्तम प्रदर्शन सुनिश्चित करने के लिए लाभ को बहुत सावधानी से समायोजित किया जाना चाहिए।
-b --amp
एम्प सक्षम करें (केवल HackRF)। डिफ़ॉल्ट बंद।
-a --access
एक्सेस एड्रेस। ADV चैनल 37 38 39 के लिए डिफ़ॉल्ट 8e89bed6। कैप्चर की गई कनेक्शन सेटअप प्रक्रिया के अनुसार डेटा चैनल के लिए सही मान निर्दिष्ट करें।
-k --crcinit
ADV चैनल के लिए डिफ़ॉल्ट 555555। कैप्चर की गई कनेक्शन सेटअप प्रक्रिया के अनुसार डेटा चैनल के लिए सही मान निर्दिष्ट करें।
-v --verbose
वर्बोज़ मोड। त्रुटि होने पर अधिक जानकारी प्रिंट करता है
-r --raw
रॉ मोड। एक्सेस एड्रेस का पता लगाने के बाद, अगले 42 रॉ बाइट्स प्रिंट करें (डिस्क्रैम्बलिंग, पार्सिंग के बिना)
-f --freq_hz (तर्क की आवश्यकता है)
यह आवृत्ति (Hz) चैनल सेटिंग को ओवरराइड करेगी (यदि कोई BTLE के अलावा अन्य आवृत्ति पर काम करना चाहता है। अधिक सामान्य उद्देश्य)।
-m --access_mask (तर्क की आवश्यकता है)
यदि इस मास्क में कोई बिट 1 है, तो एक्सेस एड्रेस में संबंधित बिट को पैकेट मौजूद होने के निर्णय में लिया जाएगा (यदि कोई पैकेट का पता लगाने के लिए छोटा/विरल अद्वितीय शब्द चाहता है। अधिक सामान्य उद्देश्य)।
-o --hop
यह ADV चैनल पर ADV_CONNECT_REQ पैकेट में लिंक सेटअप जानकारी कैप्चर होने के बाद डेटा चैनल ट्रैकिंग (आवृत्ति होपिंग) चालू करेगा।
-s --filename
पैकेट को pcap फ़ाइल में संग्रहीत करें।
btle_tx packet1 packet2 ... packetX ... rN
या
btle_tx packets.txt
packets.txt एक टेक्स्ट फ़ाइल है जिसमें कमांड लाइन पैरामीटर (packet1 packet2 ... rN) टेक्स्ट होते हैं। एक पैरामीटर प्रति पंक्ति। "#" से शुरू होने वाली पंक्ति को टिप्पणी माना जाता है। packets.txt उदाहरण देखें।
packetX
एक स्ट्रिंग है जो एक पैकेट का वर्णन करती है। सभी पैकेट एक पैकेट अनुक्रम बनाते हैं।
rN
इसका मतलब है कि अनुक्रम N बार दोहराया जाएगा। यदि निर्दिष्ट नहीं है, तो अनुक्रम केवल एक बार भेजा जाएगा।
packetX स्ट्रिंग प्रारूप
channel_number-packet_type-field-value-field-value-...-Space-value
प्रत्येक डिस्क्रिप्टर स्ट्रिंग BTLE चैनल नंबर (0~39) से शुरू होती है, फिर packet_type (RAW/iBeacon/ADV_IND/ADV_DIRECT_IND/आदि। सभी प्रारूप उदाहरण अंत में: परिशिष्ट देखें), फिर field-value जोड़ी जो packet_type विशिष्ट है, अंत में Space-value जोड़ी (वैकल्पिक) होती है जहां मान निर्दिष्ट करता है कि इस पैकेट के भेजे जाने के बाद कितने मिलीसेकंड प्रतीक्षा की जाएगी।
कमांड लाइन पैकेट डिस्क्रिप्टर में स्पेस वर्ण " " का उपयोग न करें। आप txt फ़ाइल पैकेट डिस्क्रिप्टर में स्पेस का उपयोग कर सकते हैं।
प्रत्येक फ़ील्ड के अंदर "-" का उपयोग न करें। "-" जादुई वर्ण है जिसका उपयोग पैकेट डिस्क्रिप्टर में विभिन्न फ़ील्ड को अलग करने के लिए किया जाता है।
इस कमांड से पहले अपने iPhone/डिवाइस में LightBlue ऐप (या अन्य BLE स्निफ़र) खोलें:
./btle-tools/src/btle_tx ../btle-tools/src/packets_discovery.txt
आप अपने LightBlue ऐप में "SDR Bluetooth Low Energy" नाम का डिवाइस देखेंगे।
संबंधित कमांड लाइन:
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r40
ध्यान दें: स्पेस " " को "/" से बदल दिया गया है क्योंकि कमांड लाइन में स्पेस " " समर्थित नहीं है।
btle_tx 37-ADV_IND-TxAdd-0-RxAdd-0-AdvA-90D7EBB19299-AdvData-0201050702031802180418-Space-1 37-CONNECT_REQ-TxAdd-0-RxAdd-0-InitA-001830EA965F-AdvA-90D7EBB19299-AA-60850A1B-CRCInit-A77B22-WinSize-02-WinOffset-000F-Interval-0050-Latency-0000-Timeout-07D0-ChM-1FFFFFFFFF-Hop-9-SCA-5-Space-1 9-LL_DATA-AA-60850A1B-LLID-1-NESN-0-SN-0-MD-0-DATA-XX-CRCInit-A77B22-Space-1
उपरोक्त डिवाइस 1 और डिवाइस 2 के बीच कनेक्शन स्थापना प्रक्रिया का अनुकरण करता है। संबंधित डिस्क्रिप्टर फ़ाइल BTLE/host/btle-tools/src/packets.txt।
पहला पैकेट -- डिवाइस 1 चैनल 37 में ADV_IND पैकेट भेजता है।