Mengendus Paket dengan Pyspinel

Lihat sumber di GitHub

Panduan ini membahas cara mengkonfigurasi Wireshark dan menjalankan Pyspinel untuk mengendus paket dari jaringan Thread.

Untuk menggunakan plugin extcap Wireshark untuk penyadapan paket, lihat Pengendalian Paket menggunakan extcap.

Menyiapkan lingkungan sniffer

Sebelum memulai, selesaikan langkah-langkah berikut:

Membuat sniffer

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

NRF52840 Nordik

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

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

Setel kecepatan baud sebagai 460800. Temukan jalur #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 di src/nrf52840/transport-config.h, dan menggantinya dengan #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800.

Bangun biner:

./script/build nrf52840 UART_trans

Konversikan output biner ot-rcp ke heksadesimal:

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

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

Nonaktifkan Mass Storage Device (MSD) pada nRF52840 untuk menghindari masalah dengan data rusak atau drop 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 Anda inginkan untuk diendus. Anda akan membutuhkannya untuk konfigurasi Wireshark dan menjalankan Pyspinel sniffer.

Awalan Lokal Mesh

Untuk mendapatkan Mesh Local Prefix 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 GUI Web OTBR, pilih Status. Mesh Local Prefix dicantumkan 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 GUI Web OTBR, pilih Status. Saluran tercantum sebagai NCP:Channel mirip dengan wpanctl.

Kunci Jaringan

Kunci Jaringan Thread digunakan Wireshark untuk membongkar enkripsi paket setelah rekam video. 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 diberikan jika Anda menggunakan perangkat dengan koneksi serial dan bukan koneksi soket.
Deskripsi
Flag -u atau --uart diikuti dengan jalur perangkat seperti /dev/ttyUSB0.
-c or --channel
Nilai default
11
Deskripsi
Flag -c atau --channel diikuti oleh saluran yang dikonfigurasi di Jaringan Thread Anda, tempat untuk mengendus paket.
--no-reset
Nilai default
Tanda ini menggantikan perilaku default.
Deskripsi
Tanda --no-reset diperlukan jika NCP Anda perangkat terhubung ke {i>host<i} dengan USB asli koneksi jarak jauh.
--crc
Nilai default
Tanda ini menggantikan perilaku default.
Deskripsi
Flag --crc diperlukan untuk platform seperti Board TI dan Nordic Semiconductor Thread. Bendera menghitung ulang CRC untuk menghindari ‘FCS Buruk' (pemeriksaan frame ) di Wireshark.
-b or --baudrate
Nilai default
115200
Deskripsi
Flag -b atau --baudrate digunakan untuk mengganti kecepatan baud{i> default<i}. Tetapkan nilai ini ke sama kecepatan baud yang digunakan dengan NCP build (sebaiknya 460800).
--rssi
Nilai default
Tanda ini menggantikan perilaku default.
Deskripsi
Flag --rssi digunakan untuk memastikan RSSI yang disertakan dalam {i>output pcap<i}. Anda harus menggunakan penanda ini jika TI CC24xx FCS format diaktifkan di Wireshark.
--tap
Nilai default
Tanda ini menggantikan perilaku default.
Deskripsi
Flag --tap menentukan DLT_IEEE802_15_4_TAP(283) untuk format frame, dengan pseudo-header yang berisi TLV dengan metadata (seperti FCS, RSSI, LQI, Channel). Jika tidak ditentukan, DLT_IEEE802_15_4_WITHFCS(195) akan digunakan oleh default dengan RSSI dan LQI tambahan setelah PHY secara langsung, seperti dalam format TI CC24xx FCS. Anda harus menggunakan penanda ini jika ITU-T CRC-16 diaktifkan di Wireshark. Jika opsi tersebut tidak diaktifkan di Wireshark, jangan gunakan penanda ini.

Jalankan sniffer

Pastikan untuk menggunakan jalur perangkat spesifik untuk NCP Anda dan saluran untuk Jaringan Thread yang Anda coba endus.

Jika mengikuti panduan ini, DK nRF52840 harus dipasang ke mesin {i>host<i} dengan porta debug, seperti yang dijelaskan dalam Flash nRF52840. Untuk menjalankan alat sniffer Pyspinel, gunakan flag -b untuk menentukan kecepatan baud (jika diubah dari default) dan hapus flag --no-reset.

Jika Mengonfigurasi Wireshark untuk menampilkan RSSI, Anda juga harus menyertakan --rssi penanda saat Anda menjalankan alat sniffer. Misalnya, untuk mengendus Saluran 15 menggunakan perangkat yang dipasang di /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 -

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

Tangkap Wireshark

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

Koneksi USB native

Penggunaan port USB nRF52840 DK memerlukan biner ot-rcp OpenThread untuk dibuat dengan USB_trans:

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

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

Resource

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