Pyspinel দিয়ে প্যাকেট স্নিফিং

GitHub-এ উৎস দেখুন

এই গাইডটি কভার করে যে কীভাবে Wireshark কনফিগার করতে হয় এবং একটি থ্রেড নেটওয়ার্ক থেকে প্যাকেট স্নিফ করতে Pyspinel চালাতে হয়।

প্যাকেট স্নিফিংয়ের জন্য Wireshark extcap প্লাগইন ব্যবহার করতে, extcap ব্যবহার করে প্যাকেট স্নিফিং পড়ুন।

স্নিফার পরিবেশ সেট আপ করুন

আপনি শুরু করার আগে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

স্নিফার তৈরি করুন

ot-rcp বাইনারি আউটপুট ব্যবহার করে স্নিফার হিসাবে পরিবেশন করার জন্য একটি NCP ডিভাইস তৈরি এবং ফ্ল্যাশ করুন।

নর্ডিক nRF52840

স্নিফার হিসাবে ব্যবহারের জন্য নর্ডিক 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.

থ্রেড নেটওয়ার্ক বৈশিষ্ট্য

চালিয়ে যাওয়ার আগে, আপনি যে থ্রেড নেটওয়ার্কটি স্নিফ করতে চান তার জন্য নিম্নলিখিত বৈশিষ্ট্যগুলি পান৷ আপনার ওয়্যারশার্ক কনফিগারেশন এবং পিসপিনেল স্নিফার চালানোর জন্য তাদের প্রয়োজন হবে।

মেশ স্থানীয় উপসর্গ

লক্ষ্য থ্রেড নেটওয়ার্কে একটি ডিভাইস থেকে মেশ স্থানীয় উপসর্গ পেতে:

  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 ওয়েব GUI ব্যবহার করে, স্থিতি নির্বাচন করুন। মেশ স্থানীয় উপসর্গটি IPv6:MeshLocalPrefix হিসাবে wpanctl এর মতো তালিকাভুক্ত।

চ্যানেল

লক্ষ্য থ্রেড নেটওয়ার্কে একটি ডিভাইস থেকে চ্যানেল পেতে:

  1. OpenThread CLI ব্যবহার করে:

    channel
    15
    

  2. একটি NCP এর সাথে wpanctl ব্যবহার করা:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. OTBR ওয়েব GUI ব্যবহার করে, স্থিতি নির্বাচন করুন। চ্যানেলটি NCP হিসেবে তালিকাভুক্ত করা হয়েছে: wpanctl মতো চ্যানেল।

নেটওয়ার্ক কী

থ্রেড নেটওয়ার্ক কীটি ওয়্যারশার্ক দ্বারা ক্যাপচারের পরে প্যাকেটগুলি ডিক্রিপ্ট করতে ব্যবহার করা হয়। লক্ষ্য থ্রেড নেটওয়ার্কের একটি ডিভাইস থেকে নেটওয়ার্ক কী পেতে:

  1. OpenThread CLI ব্যবহার করে:

    networkkey
    33334444333344443333444433334444
    

  2. একটি NCP-এর সাথে wpanctl ব্যবহার করা:

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

থ্রেড নেটওয়ার্ক কী OTBR ওয়েব GUI-তে উপলব্ধ নেই।

স্নিফার বিকল্প

অপশন
-u or --uart
ডিফল্ট মান
কোনটিই নয় - আপনি যদি সকেট সংযোগ না করে একটি সিরিয়াল সংযোগ সহ একটি ডিভাইস ব্যবহার করেন তবে অবশ্যই প্রদান করতে হবে৷
বর্ণনা
-u বা --uart পতাকা একটি ডিভাইস পাথ অনুসরণ করে যেমন /dev/ttyUSB0
-c or --channel
ডিফল্ট মান
11
বর্ণনা
আপনার থ্রেড নেটওয়ার্কে কনফিগার করা চ্যানেল দ্বারা অনুসরণ করা -c বা --channel পতাকা, যার উপর প্যাকেটগুলি স্নিফ করা যায়।
--no-reset
ডিফল্ট মান
এই পতাকা ডিফল্ট আচরণ ওভাররাইড করে।
বর্ণনা
যদি আপনার NCP ডিভাইসটি নেটিভ USB সংযোগের সাথে হোস্টের সাথে সংযুক্ত থাকে তবে --no-reset পতাকা প্রয়োজন।
--crc
ডিফল্ট মান
এই পতাকা ডিফল্ট আচরণ ওভাররাইড করে।
বর্ণনা
টিআই এবং নর্ডিক সেমিকন্ডাক্টর থ্রেড বোর্ডের মতো প্ল্যাটফর্মের জন্য --crc পতাকা প্রয়োজন। ওয়্যারশার্ক-এ 'খারাপ এফসিএস' (ফ্রেম চেক সিকোয়েন্স) সতর্কতা এড়াতে পতাকাটি সিআরসিকে পুনরায় গণনা করে।
-b or --baudrate
ডিফল্ট মান
115200
বর্ণনা
ডিফল্ট বড রেট ওভাররাইড করতে -b বা --baudrate পতাকা ব্যবহার করা হয়। এই মানটি আপনার NCP বিল্ডের সাথে ব্যবহৃত একই বড হারে সেট করুন (আমরা 460800 সুপারিশ করি)।
--rssi
ডিফল্ট মান
এই পতাকা ডিফল্ট আচরণ ওভাররাইড করে।
বর্ণনা
--rssi পতাকা pcap আউটপুটে RSSI অন্তর্ভুক্ত করা হয়েছে তা নিশ্চিত করতে ব্যবহৃত হয়। Wireshark-এ TI CC24xx FCS ফর্ম্যাট বিকল্প সক্রিয় থাকলে আপনাকে অবশ্যই এই পতাকাটি ব্যবহার করতে হবে।
--tap
ডিফল্ট মান
এই পতাকা ডিফল্ট আচরণ ওভাররাইড করে।
বর্ণনা
--tap পতাকাটি ফ্রেম বিন্যাসের জন্য DLT_IEEE802_15_4_TAP(283) নির্দিষ্ট করে, মেটাডেটা সহ TLV সমন্বিত একটি ছদ্ম-শিরোনাম (যেমন FCS, RSSI, LQI, চ্যানেল)। যদি নির্দিষ্ট করা না থাকে, DLT_IEEE802_15_4_WITHFCS(195) ডিফল্টরূপে TI CC24xx FCS ফর্ম্যাটে যেমন PHY ফ্রেম অনুসরণ করে অতিরিক্ত RSSI এবং LQI এর সাথে ব্যবহার করা হবে। ITU-T CRC-16 বিকল্পটি Wireshark-এ সক্রিয় থাকলে আপনাকে অবশ্যই এই পতাকাটি ব্যবহার করতে হবে। যদি সেই বিকল্পটি Wireshark-এ সক্রিয় না থাকে, তাহলে এই পতাকাটি ব্যবহার করবেন না।

স্নিফার চালান

আপনার NCP-এর জন্য নির্দিষ্ট ডিভাইস পাথ এবং থ্রেড নেটওয়ার্কের জন্য চ্যানেল ব্যবহার করা নিশ্চিত করুন যা আপনি স্নিফ করার চেষ্টা করছেন।

এই নির্দেশিকা অনুসরণ করলে, nRF52840 DK ডিবাগ পোর্ট দ্বারা হোস্ট মেশিনের সাথে সংযুক্ত করা উচিত, যেমনটি ফ্ল্যাশ nRF52840 এ বর্ণিত হয়েছে। Pyspinel স্নিফার চালানোর জন্য, বড রেট নির্দিষ্ট করতে -b পতাকা ব্যবহার করুন (যদি এটি ডিফল্ট থেকে পরিবর্তন করা হয়) এবং --no-reset পতাকা বাদ দিন।

আপনি যদি RSSI প্রদর্শনের জন্য Wireshark কনফিগার করেন, আপনি স্নিফার টুল চালানোর সময় আপনাকে --rssi পতাকাও অন্তর্ভুক্ত করতে হবে। উদাহরণস্বরূপ, ওয়্যারশার্ক আউটপুটে অন্তর্ভুক্ত RSSI সহ /dev/ttyACM0 এ মাউন্ট করা একটি ডিভাইস ব্যবহার করে চ্যানেল 15-এ স্নিফ করতে:

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

আপনি এখন Wireshark-এ এই কনফিগারেশনের জন্য প্যাকেট এবং সম্পর্কিত প্রোটোকল দেখতে সক্ষম হবেন:

ওয়্যারশার্ক ক্যাপচার

পিসপিনেল স্নিফার চালানোর বিষয়ে আরও তথ্যের জন্য স্পিনেল স্নিফার রেফারেন্স পড়ুন।

নেটিভ ইউএসবি সংযোগ

nRF52840 DK USB পোর্ট ব্যবহার করার জন্য OpenThread ot-rcp বাইনারি USB_trans দিয়ে তৈরি করা প্রয়োজন :

./script/build nrf52840 USB_trans
nRF52840 DK ফ্ল্যাশ করুন, USB পোর্টের মাধ্যমে হোস্ট মেশিনের সাথে সংযুক্ত করুন , তারপর --no-reset পতাকা ব্যবহার করুন কিন্তু বাদ দিন -b পতাকা যখন স্নিফার চালানো:

python sniffer.py -c 15 -u /dev/ttyACM0 --crc --no-reset --rssi | wireshark -k -i -

সম্পদ

অতিরিক্ত নর্ডিক সরঞ্জামের জন্য, নর্ডিক সেমিকন্ডাক্টর পড়ুন — থ্রেড স্নিফার এনআরএফ৫২৮৪০-এর উপর ভিত্তি করে Wireshark-এর সাথে