การดมแพ็กเก็ตด้วย Pyspinel

ดูแหล่งที่มาใน GitHub

คู่มือนี้ครอบคลุมวิธีกำหนดค่า Wireshark และเรียกใช้ Pyspinel เพื่อดักจับแพ็กเก็ต จากเครือข่ายเทรด

หากต้องการใช้ปลั๊กอิน Wireshark extcap สำหรับการดักจับแพ็คเก็ต โปรดดู Packet Sniffing (การดักจับแพ็กเก็ต) โดยใช้ส่วนขยาย

ตั้งค่าสภาพแวดล้อมสำหรับผู้ตรวจสอบ

ก่อนที่จะเริ่ม โปรดทำตามขั้นตอนต่อไปนี้

สร้างตัวดม

สร้างและแฟลชอุปกรณ์ NCP เพื่อทำหน้าที่เป็นตัวดักจับ โดยใช้เอาต์พุตไบนารี ot-rcp

นอร์ดิก nRF52840

วิธีตั้งค่าตัวอย่าง Nordic nRF52840 สำหรับใช้เป็นเครื่องดม, โคลน openthread/ot-nrf528xx และตั้งค่าสภาพแวดล้อมของบิลด์ดังนี้

git clone https://github.com/openthread/ot-nrf528xx --recursive
./script/bootstrap

ตั้งค่าอัตรารับส่งข้อมูลเป็น 460800 ค้นหาเส้น #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 ใน src/nrf52840/transport-config.h และแทนที่ด้วย #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800

สร้างไบนารีด้วยคำสั่งต่อไปนี้

./script/build nrf52840 UART_trans

แปลงเอาต์พุตไบนารี ot-rcp เป็นเลขฐาน 16:

arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex

แฟลชไฟล์ ot-rcp.hex ไปยังบอร์ด nRF52840 ตามรายละเอียดใน แฟลช nRF52840

ปิดใช้ Mass Storage Device (MSD) ใน 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.

พร็อพเพอร์ตี้ของเครือข่ายเทรด

ก่อนดำเนินการต่อ โปรดรับพร็อพเพอร์ตี้ต่อไปนี้สำหรับเครือข่ายเทรดที่ต้องการ เพื่อดม คุณจะต้องใช้คีย์เหล่านี้ในการกำหนดค่า Wireshark และเรียกใช้ Pyspinel ดม

คำนำหน้าภายในของ Mesh

วิธีรับคำนำหน้า Mesh Local จากอุปกรณ์ในเครือข่ายเทรดเป้าหมาย

  1. การใช้ OpenThread CLI

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

  2. การใช้ wpanctl กับ NCP

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

  3. เลือกสถานะโดยใช้ OTBR Web GUI แสดงรายการคำนำหน้า Mesh Local แล้ว IPv6:MeshLocalPrefix ที่คล้ายกับ wpanctl

ช่อง

วิธีรับช่องจากอุปกรณ์ในเครือข่ายเทรดเป้าหมาย

  1. การใช้ OpenThread CLI

    channel
    15
    

  2. การใช้ wpanctl กับ NCP

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. เลือกสถานะโดยใช้ OTBR Web GUI ช่องจะแสดงเป็น NCP:ช่องที่คล้ายกับ wpanctl

คีย์เครือข่าย

Wireshark จะใช้คีย์เครือข่ายเทรดเพื่อถอดรหัสแพ็กเก็ตหลังจาก การจับภาพ วิธีรับคีย์เครือข่ายจากอุปกรณ์ในเครือข่ายเทรดเป้าหมาย

  1. การใช้ OpenThread CLI

    networkkey
    33334444333344443333444433334444
    

  2. การใช้ wpanctl กับ NCP

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

คีย์เครือข่ายเทรดไม่พร้อมใช้งานใน OTBR เว็บ GUI

ตัวเลือกเครื่องดักจับ

ตัวเลือก
-u or --uart
ค่าเริ่มต้น
ไม่มี - ต้องระบุหากคุณใช้อุปกรณ์ที่มี แบบอนุกรม ไม่ใช่การเชื่อมต่อซ็อกเก็ต
คำอธิบาย
ธง -u หรือ --uart ตามด้วย เส้นทางอุปกรณ์ เช่น /dev/ttyUSB0
-c or --channel
ค่าเริ่มต้น
11
คำอธิบาย
ติดตามการแฟล็ก -c หรือ --channel แล้ว โดยช่องที่กำหนดค่าไว้ในเครือข่ายเทรดของคุณ ซึ่ง เพื่อดักจับแพ็คเก็ต
--no-reset
ค่าเริ่มต้น
การตั้งค่าสถานะนี้จะลบล้างลักษณะการทำงานเริ่มต้น
คำอธิบาย
ต้องใช้แฟล็ก --no-reset หาก NCP ของคุณ อุปกรณ์เชื่อมต่อกับโฮสต์ด้วย USB ดั้งเดิม การเชื่อมต่อ
--crc
ค่าเริ่มต้น
การตั้งค่าสถานะนี้จะลบล้างลักษณะการทำงานเริ่มต้น
คำอธิบาย
ต้องใช้ Flag --crc สำหรับแพลตฟอร์มต่างๆ เช่น บอร์ดเทรด TI และเซมิคอนดักเตอร์แบบนอร์ดิก ธง คำนวณ CRC ใหม่เพื่อหลีกเลี่ยง "FCS ที่ไม่ดี" (การตรวจสอบเฟรม ตามลำดับ) ใน Wireshark
-b or --baudrate
ค่าเริ่มต้น
115200
คำอธิบาย
มีการใช้แฟล็ก -b หรือ --baudrate เพื่อลบล้างอัตรารับส่งข้อมูลเริ่มต้น ตั้งค่านี้เป็นค่าเดียวกัน อัตรารับส่งข้อมูลที่ใช้กับ NCP บิลด์ (เราขอแนะนำให้ใช้ 460800)
--rssi
ค่าเริ่มต้น
การตั้งค่าสถานะนี้จะลบล้างลักษณะการทำงานเริ่มต้น
คำอธิบาย
ระบบใช้ Flag --rssi เพื่อให้แน่ใจว่า RSSI จะ ที่รวมอยู่ในเอาต์พุต Pcap คุณต้องใช้การตั้งค่าสถานะนี้หาก TI CC24xx FCS รูปแบบ เปิดใช้อยู่ใน Wireshark
--tap
ค่าเริ่มต้น
การตั้งค่าสถานะนี้จะลบล้างลักษณะการทำงานเริ่มต้น
คำอธิบาย
แฟล็ก --tap ที่ระบุ DLT_IEEE802_15_4_TAP(283) สำหรับรูปแบบเฟรม ที่มีส่วนหัวปลอมที่มี TLV พร้อมข้อมูลเมตา (เช่น FCS, RSSI, LQI, ช่อง) หากไม่ได้ระบุ จะมีการใช้ DLT_IEEE802_15_4_WITHFCS(195) โดย ค่าเริ่มต้นที่มี RSSI และ LQI เพิ่มเติมตาม PHY เฟรมโดยตรงดังรูปแบบ TI CC24xx FCS คุณต้องใช้การตั้งค่าสถานะนี้หาก ITU-T CRC-16 เปิดใช้งานใน Wireshark แล้ว หากไม่ได้เปิดใช้ตัวเลือกดังกล่าว ใน Wireshark อย่าใช้ธงนี้

เรียกใช้เครื่องมือดักจับ

อย่าลืมใช้เส้นทางอุปกรณ์ที่เฉพาะเจาะจงสำหรับ NCP และช่องสำหรับ เครือข่ายเทรดที่คุณพยายามตรวจหา

หากทำตามคู่มือนี้ คุณควรติด nRF52840 DK เข้ากับเครื่องโฮสต์โดย พอร์ตดีบัก ตามที่อธิบายไว้ใน Flash nRF52840 ในการเรียกใช้ Pyspinel Sniffer ใช้แฟล็ก -b เพื่อระบุอัตรารับส่งข้อมูล (หากมีการเปลี่ยนแปลงจากค่าเริ่มต้น) และไม่ใส่ค่าสถานะ --no-reset

หากคุณกำหนดค่า Wireshark เพื่อแสดง RSSI คุณต้องระบุ --rssi ด้วย Flag เมื่อคุณเรียกใช้เครื่องมือSniffer ตัวอย่างเช่น หากต้องการดมในช่อง 15 โดยใช้ อุปกรณ์ที่ติดตั้งที่ /dev/ttyACM0 พร้อม RSSI ที่รวมอยู่ในเอาต์พุต Wireshark:

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

ตอนนี้คุณควรจะสามารถดูแพ็กเก็ตและโปรโตคอลที่เกี่ยวข้องสำหรับกระบวนการนี้ การกำหนดค่าใน Wireshark:

การจับภาพ Wireshark

ดูข้อมูลเพิ่มเติมได้ที่การดักจับดอกสปิเนล ข้อมูลอ้างอิงสำหรับ ดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียกใช้ Pyspinel Sniffer

การเชื่อมต่อ USB โดยตรง

การใช้พอร์ต USB nRF52840 DK ต้องใช้ไบนารีของ OpenThread ot-rcp เพื่อ สร้างขึ้นด้วย USB_trans:

./script/build nrf52840 USB_trans
แฟลช nRF52840 DK เชื่อมต่อกับเครื่องโฮสต์ด้วย USB พอร์ต จากนั้นใช้แฟล็ก --no-reset แต่ไม่ต้องใส่ Flag -b เมื่อเรียกใช้โปรแกรมตรวจจับ:

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

แหล่งข้อมูล

สำหรับเครื่องมือนอร์ดิกเพิ่มเติม โปรดดูที่ Nordic เซมิคอนดักเตอร์ — Thread เครื่องดมกลิ่นที่ใช้ nRF52840 พร้อม Wireshark