Pyspinel के साथ पैकेट स्निफिंग

GitHub पर सोर्स देखें

इस गाइड में Wireshark कॉन्फ़िगर करने और Pyspinel को Thread नेटवर्क से स्निफ़ पैकेट चलाने का तरीका बताया गया है.

पैकेट स्निफ़िंग के लिए, Wiresha extcap प्लग इन का इस्तेमाल करने के लिए, extcap का इस्तेमाल करके पैकेट स्निफ़िंग देखें.

स्निफ़र एनवायरमेंट सेट अप करना

शुरू करने से पहले, यह तरीका अपनाएं:

स्नाइफ़र बनाएं

ot-rcp बाइनरी आउटपुट का इस्तेमाल करके, एनसीपी डिवाइस बनाएं और उसे स्निफ़र के तौर पर फ़्लैश करें.

नॉर्डिक 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 पर मास स्टोरेज डिवाइस (एमएसडी) को बंद करें, ताकि डीबग पोर्ट का इस्तेमाल करते समय डेटा के खराब होने या खराब होने से बचा जा सके:

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.

थ्रेड नेटवर्क प्रॉपर्टी

आगे बढ़ने से पहले, उस थ्रेड नेटवर्क के लिए ये प्रॉपर्टी हासिल करें जिसे आपको स्निफ़ करना है. आपको उनकी ज़रूरत Wire सुझावों को कॉन्फ़िगर करने और Pyspinel स्निफ़र को चलाने के लिए होगी.

मेश लोकल प्रीफ़िक्स

टारगेट थ्रेड नेटवर्क के किसी डिवाइस से, मेश लोकल प्रीफ़िक्स शुरू करने के लिए:

  1. OpenThread सीएलआई का इस्तेमाल करना:

    dataset active
    Mesh Local Prefix: fd33:3333:3344:0/64
    

  2. एनसीपी के साथ wpanctl का इस्तेमाल करना:

    wpanctl getprop IPv6:MeshLocalPrefix
    IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"
    

  3. OTBR वेब GUI का इस्तेमाल करके, स्थिति चुनें. मेश लोकल प्रीफ़िक्स, wpanctl की तरह IPv6:MashLocalPrefix के तौर पर सूची में मौजूद है.

चैनल

टारगेट थ्रेड नेटवर्क में, किसी डिवाइस से चैनल पाने के लिए:

  1. OpenThread सीएलआई का इस्तेमाल करना:

    channel
    15
    

  2. एनसीपी के साथ wpanctl का इस्तेमाल करना:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. OTBR वेब GUI का इस्तेमाल करके, स्थिति चुनें. चैनल को wpanctl की तरह NCP:Channel के तौर पर सूची में शामिल किया गया है.

नेटवर्क कुंजी

वायर कैप्चर, कैप्चर की जाने वाली थ्रेड को डिक्रिप्ट करने के लिए, थ्रेड नेटवर्क कुंजी का इस्तेमाल करता है. टारगेट थ्रेड नेटवर्क में, किसी डिवाइस से नेटवर्क कुंजी पाने के लिए:

  1. OpenThread सीएलआई का इस्तेमाल करना:

    networkkey
    33334444333344443333444433334444
    

  2. एनसीपी के साथ wpanctl का इस्तेमाल करना:

    wpanctl getprop Network:Key
    Network:Key = [33334444333344443333444433334444]
    

OTBR वेब GUI में Thread नेटवर्क कुंजी उपलब्ध नहीं है.

स्निफ़र के विकल्प

विकल्प
-u or --uart
डिफ़ॉल्ट वैल्यू
कुछ नहीं - अगर आप किसी सीरियल कनेक्शन के साथ डिवाइस का इस्तेमाल कर रहे हैं, न कि सॉकेट कनेक्शन
Description
-u या --uart फ़्लैग के बाद /dev/ttyUSB0 जैसा डिवाइस का पाथ दिया जाता है.
-c or --channel
डिफ़ॉल्ट वैल्यू
11
Description
-c या --channel फ़्लैग, उसके बाद आपके Thread नेटवर्क पर कॉन्फ़िगर किए गए चैनल के बाद, पैकेट को स्निफ़ करने के लिए.
--no-reset
डिफ़ॉल्ट वैल्यू
यह फ़्लैग डिफ़ॉल्ट व्यवहार को बदल देता है.
Description
अगर आपका NCP डिवाइस, नेटिव यूएसबी कनेक्शन से कनेक्ट है, तो --no-reset फ़्लैग की ज़रूरत होती है.
--crc
डिफ़ॉल्ट वैल्यू
यह फ़्लैग डिफ़ॉल्ट व्यवहार को बदल देता है.
Description
--crc फ़्लैग को TI और नॉर्डिक सेमीकंडक्टर थ्रेड बोर्ड जैसे प्लैटफ़ॉर्म के लिए ज़रूरी है. फ़्लैग की मदद से, CRC की फिर से जांच की जाती है, ताकि वायर शार्क को ‘खराब FCS’ (फ़्रेम जांच ) चेतावनी न दी जा सके.
-b or --baudrate
डिफ़ॉल्ट वैल्यू
115200
Description
-b या --baudrate फ़्लैग का इस्तेमाल डिफ़ॉल्ट बॉड रेट को बदलने के लिए किया जाता है. इस वैल्यू को उसी बॉड रेट पर सेट करें जिसका इस्तेमाल आपके NCP बिल्ड के साथ किया गया है (हमारा सुझाव है 460800).
--rssi
डिफ़ॉल्ट वैल्यू
यह फ़्लैग डिफ़ॉल्ट व्यवहार को बदल देता है.
Description
--rssi फ़्लैग का इस्तेमाल यह पक्का करने के लिए किया जाता है कि आरएसआई को पैक पैक में शामिल किया गया है. अगर Wire शार्क में TI CC24xx FCS फ़ॉर्मैट का विकल्प चालू है, तो आपको इस फ़्लैग का इस्तेमाल करना चाहिए.
--tap
डिफ़ॉल्ट वैल्यू
यह फ़्लैग डिफ़ॉल्ट व्यवहार को बदल देता है.
Description
--tap फ़्लैग, फ़्रेम फ़ॉर्मैट के लिए DLT_IEEE802_15_4_TAP(283) के बारे में बताता है. साथ ही, इसमें मेटाडेटा के साथ TLVs (जैसे कि FCS, RSSI, LQI, Channel) शामिल होता है. अगर तय नहीं है, तो DLT_IEEE802_15_4_WITHFCS(195) का इस्तेमाल अतिरिक्त आरएसआई और एलक्यूआई के साथ किया जा सकता है. ये पीएचआई फ़्रेम के बाद सीधे तौर पर इस्तेमाल किए जाते हैं, जैसा कि TI CC24xx FCS फ़ॉर्मैट में है. अगर Wire शार्क में ITU-T CRC-16 विकल्प चालू है, तो आपको इस फ़्लैग का इस्तेमाल करना चाहिए. अगर विकल्प Wireshark में चालू नहीं है, तो इस फ़्लैग का इस्तेमाल न करें.

स्निफ़र चलाएं

पक्का करें कि आप NCP के लिए, खास डिवाइस पाथ और उस थ्रेड नेटवर्क के चैनल का इस्तेमाल करें जिसे आप स्निफ़ करने की कोशिश कर रहे हैं.

अगर इस गाइड का पालन किया जा रहा है, तो nRF52840 DK को होस्ट मशीन से डीबग पोर्ट के साथ अटैच किया जाना चाहिए. इसके बारे में nRF52840 में बताया गया है. पिस्पिनल स्निफ़र चलाने के लिए, बॉड रेट तय करने के लिए -b फ़्लैग का इस्तेमाल करें (अगर इसे डिफ़ॉल्ट से बदला गया है) और --no-reset फ़्लैग को हटा दें.

आरएसएसआई दिखाने के लिए, Wire शार्क को कॉन्फ़िगर करें. स्निफ़र टूल चलाने पर, आपको --rssi फ़्लैग भी शामिल करना होगा. उदाहरण के लिए, /dev/ttyACM0 पर माउंट किए गए डिवाइस का इस्तेमाल करके, चैनल 15 पर स्निफ़ करने के लिए, Wire शार्क के आउटपुट में शामिल:

cd path-to-pyspinel
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --rssi -b 460800 | wireshark -k -i -

अब आपको इस कॉन्फ़िगरेशन के पैकेट और उससे जुड़े प्रोटोकॉल, Wireshark में दिखेंगे:

वायर शार्क कैप्चर

Pyspinel स्निफ़र चलाने के बारे में ज़्यादा जानकारी के लिए, 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 -

रिसॉर्स

अन्य नॉर्डिक टूल के लिए, नॉर्डिक सेमीकंडक्टर — Thread स्निफ़र को Wireshark के साथ nRF52840 पर देखें.