इस गाइड में, Wireshark को कॉन्फ़िगर करने और Thread नेटवर्क से पैकेट को स्निफ़ करने के लिए Pyspinel को चलाने का तरीका बताया गया है.
पैकेट स्निफ़िंग के लिए Wireshark extcap प्लग इन का इस्तेमाल करने के लिए, extcap का इस्तेमाल करके पैकेट स्निफ़िंग लेख पढ़ें.
स्निफ़र एनवायरमेंट सेट अप करना
शुरू करने से पहले, यह तरीका अपनाएं:
- पैकेट स्निफ़िंग से जुड़ी ज़रूरी शर्तें देखें.
- Wireshark इंस्टॉल और कॉन्फ़िगर करें.
- extcap के बिना Pyspinel और उसकी डिपेंडेंसी इंस्टॉल करना.
स्निफ़र बनाना
ot-rcp
बाइनरी आउटपुट का इस्तेमाल करके, एक एनसीपी डिवाइस बनाएं और उसे फ़्लैश करें, ताकि वह स्निफ़र के तौर पर काम कर सके.
Nordic nRF52840
Nordic nRF52840 को स्निफ़र के तौर पर इस्तेमाल करने के लिए, openthread/ot-nrf528xx
को क्लोन करें और बिल्ड एनवायरमेंट सेट अप करें:
git clone https://github.com/openthread/ot-nrf528xx --recursive
./script/bootstrap
बॉड रेट को 460800 पर सेट करें. src/nrf52840/transport-config.h
में #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200
पंक्ति ढूंढें और उसे #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800
से बदलें.
बाइनरी बनाएं:
./script/build nrf52840 UART_trans
ot-rcp
बाइनरी आउटपुट को हेक्स में बदलें:
arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex
ot-rcp.hex
फ़ाइल को nRF52840 बोर्ड पर फ़्लैश करें. इसके लिए, nRF52840 को फ़्लैश करना लेख में दी गई जानकारी देखें.
nRF52840 पर, डेटा के खराब होने या डीबग पोर्ट का इस्तेमाल करते समय डेटा के रुकने से जुड़ी समस्याओं से बचने के लिए, बड़े स्टोरेज डिवाइस (MSD) की सुविधा बंद करें:
expect <<EOF
spawn JLinkExe
expect "J-Link>"
send "msddisable\n"
expect "Probe configured successfully."
exit
EOF
spawn JLinkExe SEGGER J-Link Commander V6.42b (Compiled Feb 5 2019 17:35:31) DLL version V6.42b, compiled Feb 5 2019 17:35:20 Connecting to J-Link via USB...O.K. Firmware: J-Link OB-SAM3U128-V2-NordicSemi compiled Jan 7 2019 14:07:15 Hardware version: V1.00 S/N: 683411111 VTref=3.300V Type "connect" to establish a target connection, '?' for help J-Link>msddisable Probe configured successfully.
Thread नेटवर्क की प्रॉपर्टी
जारी रखने से पहले, उस थ्रेड नेटवर्क के लिए ये प्रॉपर्टी पाएं जिसे आपको स्निफ करना है. आपको Wireshark कॉन्फ़िगरेशन और Pyspinel sniffer को चलाने के लिए, इनकी ज़रूरत पड़ेगी.
मेश लोकल प्रीफ़िक्स
टारगेट किए गए Thread नेटवर्क में किसी डिवाइस से मेश लोकल प्रीफ़िक्स पाने के लिए:
OpenThread सीएलआई का इस्तेमाल करके:
dataset active
Mesh Local Prefix: fd33:3333:3344:0/64एनसीपी के साथ
wpanctl
का इस्तेमाल करना:wpanctl getprop IPv6:MeshLocalPrefix
IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"OTBR वेब जीयूआई का इस्तेमाल करके, स्टेटस चुनें. मेश लोकल प्रीफ़िक्स को
wpanctl
की तरह ही, IPv6:MeshLocalPrefix के तौर पर सूची में शामिल किया गया है.
चैनल
टारगेट किए गए Thread नेटवर्क में मौजूद किसी डिवाइस से चैनल पाने के लिए:
OpenThread सीएलआई का इस्तेमाल करके:
channel
15एनसीपी के साथ
wpanctl
का इस्तेमाल करना:wpanctl getprop NCP:Channel
NCP:Channel = 15OTBR वेब जीयूआई का इस्तेमाल करके, स्टेटस चुनें. चैनल को
wpanctl
की तरह ही, सूची में NCP:Channel के तौर पर दिखाया गया है.
नेटवर्क कुंजी
Wireshark, कैप्चर करने के बाद पैकेट को डिक्रिप्ट करने के लिए, Thread नेटवर्क पासकोड का इस्तेमाल करता है. टारगेट किए गए Thread नेटवर्क में मौजूद किसी डिवाइस से नेटवर्क पासकोड पाने के लिए:
OpenThread सीएलआई का इस्तेमाल करके:
networkkey
33334444333344443333444433334444एनसीपी के साथ
wpanctl
का इस्तेमाल करना:wpanctl getprop Network:Key
Network:Key = [33334444333344443333444433334444]
OTBR वेब जीयूआई में, थ्रेड नेटवर्क पासकोड उपलब्ध नहीं है.
स्निफ़र के विकल्प
विकल्प | |||||
---|---|---|---|---|---|
-u or --uart |
|
||||
-c or --channel |
|
||||
--no-reset |
|
||||
--crc |
|
||||
-b or --baudrate |
|
||||
--rssi |
|
||||
--tap |
|
स्निफ़र चलाना
पक्का करें कि आपने अपने एनसीपी के लिए डिवाइस के खास पाथ और उस Thread नेटवर्क के चैनल का इस्तेमाल किया हो जिसे आपको स्निफ़ करना है.
इस गाइड का पालन करते समय, nRF52840 DK को होस्ट मशीन से डिबग पोर्ट के ज़रिए अटैच किया जाना चाहिए. इस बारे में nRF52840 को फ़्लैश करना में बताया गया है. Pyspinel sniffer को चलाने के लिए, Baud rate (अगर इसे डिफ़ॉल्ट से बदला गया है) बताने के लिए -b
फ़्लैग का इस्तेमाल करें और --no-reset
फ़्लैग को हटाएं.
अगर आरएसएसआई दिखाने के लिए Wireshark को कॉन्फ़िगर किया जाता है, तो आपको स्निफ़र टूल चलाते समय --rssi
फ़्लैग भी शामिल करना होगा. उदाहरण के लिए, /dev/ttyACM0
पर माउंट किए गए डिवाइस का इस्तेमाल करके, चैनल 15 पर स्निफ़ करने के लिए, Wireshark के आउटपुट में आरएसएसआई शामिल करें:
cd path-to-pyspinel
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --rssi -b 460800 | wireshark -k -i -
अब आपको Wireshark में इस कॉन्फ़िगरेशन के लिए पैकेट और उससे जुड़े प्रोटोकॉल दिखने चाहिए:
Pyspinel sniffer को चलाने के बारे में ज़्यादा जानकारी के लिए, Spinel sniffer के रेफ़रंस देखें.
नेटिव यूएसबी कनेक्शन
nRF52840 DK के यूएसबी पोर्ट का इस्तेमाल करने के लिए, OpenThread ot-rcp
बाइनरी को USB_trans
के साथ बनाया जाना चाहिए:
./script/build nrf52840 USB_trans
nRF52840 DK को फ़्लैश करें, उसे यूएसबी पोर्ट से होस्ट मशीन से कनेक्ट करें. इसके बाद, --no-reset
फ़्लैग का इस्तेमाल करें, लेकिन स्निफ़र चलाते समय -b
फ़्लैग को हटाएं:
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --no-reset --rssi | wireshark -k -i -
संसाधन
Nordic के अन्य टूल के बारे में जानने के लिए, Nordic Semiconductor — Wireshark के साथ nRF52840 पर आधारित Thread sniffer लेख पढ़ें.