การดักจับแพ็กเก็ตด้วย Pyspinel

ดูแหล่งข้อมูลใน GitHub

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

หากต้องการใช้ปลั๊กอิน Wireshark extcap สําหรับการดักจับแพ็กเก็ต โปรดดูที่การดักจับแพ็คเก็ต โดยใช้ Extcap

ตั้งค่าสภาพแวดล้อมการสแนป

ก่อนที่คุณจะเริ่มต้น ให้ทําตามขั้นตอนต่อไปนี้

สร้างการสแนป

สร้างและแฟลชอุปกรณ์ 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 เป็นเลขฐานสิบหก

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

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

ปิดใช้อุปกรณ์จัดเก็บข้อมูลขนาดใหญ่ (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 จากอุปกรณ์ในเครือข่ายชุดข้อความเป้าหมาย

  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. เลือก Status โดยใช้ OTBR Web GUI คํานําหน้าในพื้นที่ของ Mesh แสดงเป็น IPv6:MeshLocalPrefix ซึ่งคล้ายกับ wpanctl

ช่อง

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

  1. การใช้ OpenThread CLI:

    channel
    15
    

  2. ใช้ wpanctl กับ NCP

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

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

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

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

  1. การใช้ OpenThread CLI:

    networkkey
    33334444333344443333444433334444
    

  2. ใช้ wpanctl กับ NCP

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

คีย์เครือข่ายชุดข้อความใช้ไม่ได้ใน OTBR Web GUI

ตัวเลือกกลิ่น

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

เรียกใช้โปรแกรมดม

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

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

หากกําหนดค่า Wireshark เพื่อแสดง RSSI คุณจะต้องใส่แฟล็ก --rssi ด้วยเมื่อเรียกใช้เครื่องมือดักจับ เช่น หากต้องการดักจับช่อง 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

การเชื่อมต่อ USB ที่มาพร้อมเครื่อง

การใช้พอร์ต nRF52840 DK USB ต้องใช้ OpenThreadot-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 -

ทรัพยากร

สําหรับเครื่องมืออื่นๆ ของนอร์ดิก โปรดดู Nordic Semiconductor — Sniffer ที่อิงตาม nRF52840 กับ Wireshark