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

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

इस गाइड में रहा है कि कॉन्फ़िगरेशन को वायर नेटवर्क से कॉन्फ़िगर करने और Pyspinel को चलाने के लिए Pyspinel कैसे इस्तेमाल किया जाए.

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

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

शुरू करने से पहले, इन चरणों को पूरा करें:

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

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

नॉर्डिक 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

जैसा कि nRF52840 में बताया गया है, ot-rcp.hex फ़ाइल को 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.

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

आगे बढ़ने से पहले, जिस नेटवर्क को आप सूंघना चाहते हैं उसके लिए नीचे दी गई प्रॉपर्टी पाएं. आपको उनके लिए वायर शार्क कॉन्फ़िगरेशन और Pyspinel स्निफ़र चलाने के लिए इनकी ज़रूरत होगी.

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

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

  1. OpenThread CLI का इस्तेमाल करना:

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

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

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

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

चैनल

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

  1. OpenThread CLI का इस्तेमाल करना:

    channel
    15
    

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

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. OTBR वेब जीयूआई का इस्तेमाल करके, स्थिति चुनें. चैनल की सूची, एनसीपी:चैनल की तरह है. यह wpanctl की तरह ही है.

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

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

  1. OpenThread CLI का इस्तेमाल करना:

    networkkey
    33334444333344443333444433334444
    

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

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

थ्रेड नेटवर्क कुंजी, OTBR वेब जीयूआई में उपलब्ध नहीं है.

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

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

निशाना लगाने वाले गेम

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

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

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

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

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

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

Pyspinel स्निफ़र चलाने के बारे में ज़्यादा जानकारी के लिए Spinel स्निफ़र रेफ़रंस देखें.

नेटिव यूएसबी कनेक्शन

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 -

संसाधन

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