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

Mengendus Paket dengan Pyspinel

The Pyspinel sniffer alat menghubungkan ke Thread NCP atau perangkat RCP dan bertobat menjadi packet sniffer promiscuous, menghasilkan pcap (packet capture) aliran yang akan disimpan atau disalurkan langsung ke Wireshark.

Wireshark adalah alat sumber terbuka yang dapat memecahkan kode protokol jaringan di tumpukan Thread, seperti IEEE 802.15.4, 6LoWPAN, IPv6, MLE (Mesh Link Establishment), UDP, dan CoAP.

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

Untuk menggunakan Wireshark extcap plugin untuk packet sniffing, melihat Packet Sniffing menggunakan extcap .

Persyaratan

Perangkat keras:

  • Mesin host yang berfungsi sebagai NCP dan menjalankan Pyspinel dan Wireshark:
    • macOS — 64 bit OS X 10.6 atau lebih baru
    • Ubuntu
  • 1 perangkat OpenThread berkelebat dengan ot-ncp-ftd atau ot-rcp membangun.

Perangkat lunak:

  • Python 3 untuk menjalankan Pyspinel
  • Wireshark 2.4.1 atau yang lebih baru untuk Thread dukungan protokol

Instalasi

Siapkan lingkungan sniffer

Kloning dan instal Pyspinel dan dependensi:

  1. Instal dependensi:
    sudo apt install python3-pip
    pip3 install --user pyserial ipaddress
  2. Mengkloning repositori Pyspinel:
    git clone https://github.com/openthread/pyspinel
  3. Instal Pyspinel:
    cd pyspinel
    python3 setup.py install

Atau, mengatur lingkungan dengan menginstal pyspinel paket. Perhatikan bahwa paket ini menggunakan Pyspinel v1.0.0a3 rilis dan tidak terbaru Pyspinel utama.

pip3 install --user pyspinel

Instal Wireshark

Linux

Buka terminal dan jalankan perintah berikut untuk mengunduh dan menginstal Wireshark:

sudo add-apt-repository ppa:wireshark-dev/stable
sudo apt-get update
sudo apt-get install wireshark

Kami merekomendasikan menjalankan Wireshark sebagai pengguna non-root. Untuk melakukannya, konfigurasikan ulang paket:

sudo dpkg-reconfigure wireshark-common

Ketika Anda mendapatkan dialog yang meminta "Haruskah non-superusers dapat menangkap paket?", Pilih Ya, kemudian menambahkan wireshark pengguna dan pembaruan hak akses file:

sudo adduser $USER wireshark
sudo chmod +x /usr/bin/dumpcap

macOS

Download dan menginstal Wireshark untuk MacOS.

Membangun sniffer

Membangun dan flash perangkat NCP untuk melayani sebagai sniffer, menggunakan ot-rcp keluaran biner.

Nordik nRF52840

Untuk mengatur contoh Nordic nRF52840 untuk digunakan sebagai sniffer:

  1. Clone openthread / ot-nrf528xx dan set up membangun lingkungan:
    git clone https://github.com/openthread/ot-nrf528xx --recursive
    ./script/bootstrap
    
  2. Set baud rate sebagai 460800. Cari baris #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 di src/nrf52840/transport-config.h , dan menggantinya dengan #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800 .
  3. Membangun biner:
    ./script/build nrf52840 UART_trans
    
  4. Mengkonversi ot-rcp keluaran biner ke hex:
    arm-none-eabi-objcopy -O ihex build/bin/ot-rcp ot-rcp.hex
    
  5. Flash ot-rcp.hex file ke papan nRF52840 yang termaktub dalam Flash nRF52840 .
  6. Nonaktifkan Mass Storage Device (MSD) di nRF52840 untuk menghindari masalah korupsi data atau tetes bila menggunakan debug port:
    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 utas

Sebelum melanjutkan, dapatkan properti berikut untuk jaringan Thread yang ingin Anda hirup. 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 OpenThread CLI:
    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. The Mesh lokal Prefix terdaftar sebagai IPv6: MeshLocalPrefix mirip dengan wpanctl .

Saluran

Untuk mendapatkan Saluran dari perangkat di jaringan Thread target:

  1. Menggunakan OpenThread CLI:
    channel
    15
    
  2. Menggunakan wpanctl dengan NCP:
    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    
  3. Menggunakan OTBR Web GUI, pilih Status. Channel terdaftar sebagai NCP: Saluran mirip dengan wpanctl .

Kunci Jaringan

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

  1. Menggunakan OpenThread CLI:
    networkkey
    33334444333344443333444433334444
    
  2. Menggunakan wpanctl dengan NCP:
    wpanctl getprop Network:Key
    Network:Key = [33334444333344443333444433334444]
    

Kunci Jaringan Utas tidak tersedia di GUI Web OTBR.

Konfigurasi Wireshark - Protokol

Wireshark harus dikonfigurasi untuk menampilkan paket Thread dengan benar.

Pilih Preferences ... di Wireshark dan memperluas bagian Protokol.

6LoWPAN

Pilih 6LoWPAN dari daftar protokol dan memverifikasi atau mengubah pengaturan berikut:

  1. Hapus tanda centang Derive ID sesuai dengan RFC 4944.
  2. Perbarui Konteks 0 dengan Mesh Lokal Awalan untuk jaringan target Thread.
OT Sniffer Wireshark 6LoWPAN

Wireshark menggunakan konfigurasi konteks untuk mengurai alamat IPv6 terkompresi dan menampilkan alamat sumber dan tujuan IPv6 dengan benar.

Untuk menampilkan alamat prefiks on-mesh lainnya yang dikonfigurasi di gateway, perbarui ID Konteks lainnya dengan awalan tersebut.

Untuk mendapatkan ID Konteks untuk awalan on-mesh tertentu, lihat TLV Data Jaringan Utas dalam pesan respons Data MLE. Sebagai contoh:

Context 1: fd00:7d03:7d03:7d03::/64

CoAP

Pilih coap dari daftar protokol dan mengatur coap UDP Port to 61631. Hal ini memastikan TMF pesan (seperti alamat Solicit) akan ditampilkan.

IEEE 802.15.4

Pilih IEEE 802.15.4 dari daftar protokol dan memverifikasi atau mengubah pengaturan berikut:

  1. Set 802.15.4 Ethertype (dalam hex) untuk "0x809a".
  2. Mengatur Security Suite untuk "AES-128 enkripsi, 32-bit Perlindungan Integritas".
  3. Klik Edit ... tombol di sebelah Dekripsi Keys, yang mana Anda menambahkan jaringan Thread Master Key untuk paket dekripsi.
    1. Klik + untuk menambahkan kunci Dekripsi.
    2. Masukkan jaringan Thread Master Key ke dalam kolom kunci Dekripsi.
    3. Masukkan "1" sebagai indeks kunci Dekripsi.
    4. Pilih Thread hash dari Key kolom hash listbox.
    5. OT Sniffer Wireshark IEEE 802.15.4
    6. Klik OK untuk menyimpan kunci dekripsi.

Benang

Pilih Thread dari daftar protokol dan memverifikasi atau mengubah pengaturan berikut:

  1. Masukkan "00000000" untuk urutan Thread counter.
  2. Hapus tanda centang Gunakan PAN ID sebagai pertama dua oktet dari master key.
  3. Periksa secara otomatis memperoleh Thread urut counter.

Klik tombol OK untuk menyimpan perubahan protokol.

Beberapa lalu lintas Thread mungkin dianalisis sebagai protokol ZigBee. Untuk menampilkan kedua protokol ini dengan benar, edit protokol yang diaktifkan di Wireshark:

  1. Dalam Wireshark, pergi untuk Menganalisis> Protokol Diaktifkan.
  2. Hapus centang pada protokol berikut:
    1. LwMesh
    2. ZigBee
    3. Kekuatan Hijau ZigBee

Konfigurasi Wireshark - RSSI

Untuk menampilkan RSSI di Wireshark:

  1. Pergi ke Preferences> Protokol> IEEE 802.15.4.
  2. Mengatur Format FCS:
    • Jika IEEE 802.15.4 TAP cacat: TI CC24xx metadata.
    • Jika IEEE 802.15.4 TAP diaktifkan: ITU-T CRC-16. Lihat --tap bendera untuk informasi lebih lanjut.
  3. Klik OK untuk menyimpan dan kembali ke menu Preferences.
  4. Dari Preferences, pilih Appearance> Kolom.
  5. Tambahkan entri baru:
    • Judul : RSSI
    • Jenis: Kustom
    • Bidang: wpan.rssi
OT Sniffer Wireshark RSSI

Opsi pengendus

Pilihan
-u or --uart
Nilai default
Tidak ada - harus disediakan jika Anda menggunakan perangkat dengan koneksi serial dan bukan koneksi soket.
Keterangan
The -u atau --uart bendera diikuti oleh path perangkat seperti /dev/ttyUSB0 .
-c or --channel
Nilai default
11
Keterangan
The -c atau --channel bendera diikuti oleh saluran dikonfigurasi pada Anda Thread Network, di mana untuk paket mengendus.
--no-reset
Nilai default
Bendera ini menimpa perilaku default.
Keterangan
The --no-reset bendera diperlukan jika perangkat NCP Anda terhubung ke host dengan koneksi USB asli.
--crc
Nilai default
Bendera ini menimpa perilaku default.
Keterangan
The --crc bendera diperlukan untuk platform seperti TI dan Nordic Semiconductor papan Thread. Bendera menghitung ulang CRC untuk menghindari peringatan 'Bad FCS' (urutan pemeriksaan bingkai) di Wireshark.
-b or --baudrate
Nilai default
115200
Keterangan
The -b atau --baudrate bendera digunakan untuk menimpa baud rate default. Set nilai ini ke baud rate yang sama digunakan dengan Anda NCP membangun (kami sarankan 460.800).
--rssi
Nilai default
Bendera ini menimpa perilaku default.
Keterangan
The --rssi bendera digunakan untuk menjamin RSSI termasuk dalam output pcap. Anda harus menggunakan bendera ini jika format yang TI CC24xx FCS pilihan diaktifkan di Wireshark.
--tap
Nilai default
Bendera ini menimpa perilaku default.
Keterangan
The --tap menspesifikasikan flag 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 secara default dengan tambahan RSSI dan LQI berikut frame PHY langsung, seperti dalam format TI CC24xx FCS. Anda harus menggunakan bendera ini jika ITU-T CRC-16 pilihan diaktifkan di Wireshark. Jika opsi itu tidak diaktifkan di Wireshark, jangan gunakan tanda ini.

Jalankan sniffernya

Pastikan untuk menggunakan jalur perangkat khusus untuk NCP Anda dan saluran untuk jaringan Thread yang Anda coba hirup.

Jika mengikuti panduan ini, nRF52840 DK harus dilampirkan mesin host dengan port debug, seperti yang dijelaskan dalam Flash nRF52840 . Untuk menjalankan Pyspinel sniffer, menggunakan -b bendera untuk menentukan baud rate (jika itu berubah dari default) dan menghilangkan --no-reset bendera.

Misalnya, untuk mengendus di Channel 15 menggunakan perangkat yang dipasang di /dev/ttyACM0 dengan RSSI termasuk dalam output Wireshark:

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

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

Tangkapan Wireshark

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

Koneksi USB asli

Menggunakan nRF52840 DK port USB membutuhkan yang OpenThread ot-rcp biner yang akan dibangun dengan USB_trans :

./script/build nrf52840 USB_trans

Flash nRF52840 DK, hubungkan ke mesin host dengan port USB , kemudian gunakan --no-reset bendera tapi menghilangkan -b bendera ketika menjalankan sniffer:

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

Sumber daya

Untuk informasi selengkapnya tentang cara menggunakan Pyspinel dan Wireshark, lihat berikut ini: