Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Sniffing Paket dengan Pyspinel

Lihat sumber di GitHub

Panduan ini mencakup cara mengonfigurasi Wireshark dan menjalankan Pyspinel untuk mendeteksi paket dari jaringan Thread.

Untuk menggunakan plugin extcap Wireshark untuk sniffing paket, lihat Sniffing Paket menggunakan extcap.

Menyiapkan lingkungan sniffer

Sebelum memulai, selesaikan langkah-langkah berikut:

Mem-build sniffer

Mem-build dan mem-flash perangkat NCP untuk berfungsi sebagai sniffer, menggunakan output biner ot-rcp.

Nordic nRF52840

Untuk menyiapkan contoh nRF52840 Nordik yang akan digunakan sebagai sniffer, clone openthread/ot-nrf528xx dan siapkan lingkungan build:

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

Tetapkan kecepatan baud sebagai 460800. Temukan baris #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 di src/nrf52840/transport-config.h, lalu ganti dengan #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Build biner:

./script/build nrf52840 UART_trans

Konversikan output biner ot-rcp ke heksa:

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

Flash file ot-rcp.hex ke board nRF52840 seperti yang dijelaskan dalam Mem-flash nRF52840.

Nonaktifkan Mass Storage Device (MSD) pada nRF52840 untuk menghindari masalah dengan kerusakan atau penurunan data saat menggunakan port debug:

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.

Properti jaringan thread

Sebelum melanjutkan, dapatkan properti berikut untuk jaringan Thread yang ingin Anda sniff. Anda akan membutuhkannya untuk konfigurasi Wireshark dan menjalankan sniffer Pyspinel.

Awalan Lokal Mesh

Untuk mendapatkan Awalan Lokal Mesh dari perangkat di jaringan Thread target:

  1. Menggunakan CLI OpenThread:

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

  2. Menggunakan wpanctl dengan NCP:

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

  3. Menggunakan OTBR Web GUI, pilih Status. Mesh Local Prefix tercantum sebagai IPv6:MeshLocalPrefix yang mirip dengan wpanctl.

Saluran

Untuk mendapatkan Saluran dari perangkat di jaringan Thread target:

  1. Menggunakan CLI OpenThread:

    channel
    15
    

  2. Menggunakan wpanctl dengan NCP:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. Menggunakan OTBR Web GUI, pilih Status. Saluran ini tercantum sebagai NCP:Channel yang mirip dengan wpanctl.

Kunci Jaringan

Kunci Jaringan Thread digunakan oleh Wireshark untuk mendekripsi paket setelah diambil. Untuk mendapatkan Kunci Jaringan dari perangkat di jaringan Thread target:

  1. Menggunakan CLI OpenThread:

    networkkey
    33334444333344443333444433334444
    

  2. Menggunakan wpanctl dengan NCP:

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

Kunci Jaringan Thread tidak tersedia di GUI Web OTBR.

Opsi sniffer

Opsi
-u or --uart
Nilai default
Tidak ada - harus disediakan jika Anda menggunakan perangkat dengan koneksi serial, bukan koneksi soket.
Deskripsi
Flag -u atau --uart diikuti dengan jalur perangkat seperti /dev/ttyUSB0.
-c or --channel
Nilai default
11
Deskripsi
Tanda -c atau --channel diikuti oleh saluran yang dikonfigurasi di Jaringan Thread Anda, yang digunakan untuk mengambil paket.
--no-reset
Nilai default
Flag ini mengganti perilaku default.
Deskripsi
Flag --no-reset diperlukan jika perangkat NCP Anda terhubung ke host dengan koneksi USB native.
--crc
Nilai default
Flag ini mengganti perilaku default.
Deskripsi
Flag --crc diperlukan untuk platform seperti papan Thread TI dan Nordic Semiconductor. Flag ini menghitung ulang CRC untuk menghindari peringatan 'Bad FCS' (urutan pemeriksaan frame) di Wireshark.
-b or --baudrate
Nilai default
115200
Deskripsi
Flag -b atau --baudrate digunakan untuk mengganti frekuensi baud default. Tetapkan nilai ini ke kecepatan bit yang sama dengan yang digunakan untuk build NCP Anda (sebaiknya 460800).
--rssi
Nilai default
Flag ini mengganti perilaku default.
Deskripsi
Flag --rssi digunakan untuk memastikan RSSI disertakan dalam output pcap. Anda harus menggunakan tanda ini jika opsi format FCS TI2 CC24xx diaktifkan di Wireshark.
--tap
Nilai default
Flag ini mengganti perilaku default.
Deskripsi
Flag --tap menentukan DLT_IEEE802_15_4_TAP(283) untuk format frame, dengan header pseudo yang berisi TLV dengan metadata (seperti FCS, RSSI, LQI, Channel). Jika tidak ditentukan, DLT_IEEE802_15_4_WITHFCS(195) akan digunakan secara default dengan RSSI dan LQI tambahan yang mengikuti frame PHY secara langsung, seperti dalam format FCS TI CC24xx. Anda harus menggunakan flag ini jika opsi ITU-T CRC-16 diaktifkan di Wireshark. Jika opsi tersebut tidak diaktifkan di Wireshark, jangan gunakan flag ini.

Menjalankan sniffer

Pastikan untuk menggunakan jalur perangkat tertentu bagi NCP dan saluran untuk jaringan Thread yang Anda coba sniff.

Jika mengikuti panduan ini, nRF52840 DK harus dipasang ke mesin host oleh port debug, seperti yang dijelaskan dalam Flash nRF52840. Untuk menjalankan sniffer Pyspinel, gunakan flag -b untuk menentukan kecepatan bit (jika diubah dari default) dan hapus flag --no-reset.

Jika Mengonfigurasi Wireshark untuk menampilkan RSSI, Anda juga harus menyertakan tanda --rssi saat menjalankan alat sniffer. Misalnya, untuk menghirup Saluran 15 menggunakan perangkat yang dipasang pada /dev/ttyACM0 dengan RSSI yang disertakan dalam output Wireshark:

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

Sekarang Anda dapat melihat paket dan protokol terkait untuk konfigurasi ini di Wireshark:

Tangkapan Wireshark

Lihat referensi sniffer Spinel untuk mengetahui informasi lebih lanjut tentang menjalankan sniffer Pyspinel.

Koneksi USB native

Menggunakan port USB nRF52840 DK memerlukan OpenThreadot-rcp biner yang akan dibuat denganUSB_trans :

./script/build nrf52840 USB_trans
Mem-flash nRF52840 DK, hubungkan ke mesin host dengan port USB, lalu gunakan metode--no-reset tanda tetapi menghilangkan-b saat menjalankan sniffer:

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

Resource

Untuk alat Nordik tambahan, lihat Nordic Semiconductor — Thread Sniffer berdasarkan nRF52840 dengan Wireshark.