Pyspinel ile Paket Algılama

Kaynağı GitHub'da görüntüleyin

Bu kılavuzda, bir Thread ağından paketleri koklamak için Wireshark'ın nasıl yapılandırılacağı ve Pyspinel'in nasıl çalıştırılacağı açıklanmaktadır.

Paket izleme için Wireshark extcap eklentisini kullanmak istiyorsanız extcap kullanarak paket izleme başlıklı makaleyi inceleyin.

Tarayıcı ortamını ayarlama

Başlamadan önce aşağıdaki adımları tamamlayın:

Koklayıcıyı oluşturma

ot-rcp ikili çıkışını kullanarak bir NCP cihazı oluşturun ve sniffer olarak kullanılacak şekilde flaşlayın.

Nordic nRF52840

Nordic nRF52840 örneğini sniffer olarak kullanmak için openthread/ot-nrf528xx'ü kopyalayın ve derleme ortamını ayarlayın:

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

Baud hızını 460800 olarak ayarlayın. src/nrf52840/transport-config.h dosyasında #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 satırını bulun ve #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800 ile değiştirin.

İkili dosyayı derleyin:

./script/build nrf52840 UART_trans

ot-rcp ikili çıkışını onaltılık sisteme dönüştürün:

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

ot-rcp.hex dosyasını, nRF52840'u flaşlama bölümünde açıklandığı şekilde nRF52840 kartına flaşlayın.

Hata ayıklama bağlantı noktası kullanılırken veri bozulması veya veri kaybıyla ilgili sorunları önlemek için nRF52840'ta Toplu Depolama Aleti'ni (MSD) devre dışı bırakın:

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.

Thread ağı özellikleri

Devam etmeden önce, dinlemek istediğiniz mesaj dizisi ağı için aşağıdaki özellikleri alın. Wireshark yapılandırması ve Pyspinel sniffer'ı çalıştırmak için bunlara ihtiyacınız olacaktır.

Mesh Yerel Öneki

Hedef Thread ağındaki bir cihazdan Mesh yerel ön ekini almak için:

  1. OpenThread KSA'yı kullanma:

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

  2. wpanctl'ü NCP ile kullanma:

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

  3. OTBR web kullanıcı arayüzünü kullanarak Durum'u seçin. Mesh yerel ön eki, wpanctl'ye benzer şekilde IPv6:MeshLocalPrefix olarak listelenir.

Kanal

Hedef Thread ağındaki bir cihazdan kanalı almak için:

  1. OpenThread KSA'yı kullanma:

    channel
    15
    

  2. wpanctl'ü NCP ile kullanma:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. OTBR web kullanıcı arayüzünü kullanarak Durum'u seçin. Kanal, wpanctl'ye benzer şekilde NCP:Channel olarak listelenir.

Ağ Anahtarı

Thread Network Key, Wireshark tarafından yakalama işleminden sonra paketlerin şifresini çözmek için kullanılır. Hedef Thread ağındaki bir cihazdan ağ anahtarını almak için:

  1. OpenThread KSA'yı kullanma:

    networkkey
    33334444333344443333444433334444
    

  2. wpanctl'ü NCP ile kullanma:

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

Thread ağ anahtarı, OTBR web kullanıcı arayüzünde kullanılamaz.

Tarayıcı seçenekleri

Seçenekler
-u or --uart
Varsayılan değer
Yok: Soket bağlantısı yerine seri bağlantısı olan bir cihaz kullanıyorsanız belirtilmelidir.
Açıklama
-u veya --uart işareti ve ardından /dev/ttyUSB0 gibi bir cihaz yolu.
-c or --channel
Varsayılan değer
11
Açıklama
-c veya --channel işareti ve ardından paketleri algılamak için mesaj dizisinde yapılandırılmış kanal.
--no-reset
Varsayılan değer
Bu işaret, varsayılan davranışı geçersiz kılar.
Açıklama
NCP cihazınız ana makineye yerel USB bağlantısıyla bağlıysa --no-reset işareti gerekir.
--crc
Varsayılan değer
Bu işaret, varsayılan davranışı geçersiz kılar.
Açıklama
--crc işareti, TI ve Nordic Semiconductor Thread kartları gibi platformlar için gereklidir. İşaret, Wireshark'ta "Bad FCS" (bozuk çerçeve kontrol sırası) uyarısının gösterilmesini önlemek için CRC'yi yeniden hesaplar.
-b or --baudrate
Varsayılan değer
115200
Açıklama
-b veya --baudrate işareti, varsayılan baud hızını geçersiz kılmak için kullanılır. Bu değeri, NCP derlemenizle kullanılan baud hızıyla aynı olacak şekilde ayarlayın (460800'ü öneririz).
--rssi
Varsayılan değer
Bu işaret, varsayılan davranışı geçersiz kılar.
Açıklama
--rssi işareti, RSSI'nin pcap çıkışına eklenmesini sağlamak için kullanılır. Wireshark'ta TI CC24xx FCS biçimi seçeneği etkinse bu işareti kullanmanız gerekir.
--tap
Varsayılan değer
Bu işaret, varsayılan davranışı geçersiz kılar.
Açıklama
--tap işareti, çerçeve biçimi için DLT_IEEE802_15_4_TAP(283) değerini belirtir. Bu değer, meta verileri (ör. FCS, RSSI, LQI, Kanal) içeren TLV'ler içeren bir sözde başlık içerir. Belirtilmemişse doğrudan PHY çerçevesini takip eden ek RSSI ve LQI ile birlikte varsayılan olarak DLT_IEEE802_15_4_WITHFCS(195) kullanılır (TI CC24xx FCS biçiminde olduğu gibi). Wireshark'ta ITU-T CRC-16 seçeneği etkinse bu işareti kullanmanız gerekir. Wireshark'ta bu seçenek etkin değilse bu işareti kullanmayın.

Koklayıcıyı çalıştırma

NCP'niz için belirli cihaz yolunu ve dinlemeye çalıştığınız Thread ağının kanalını kullandığınızdan emin olun.

Bu kılavuzdaki talimatları uygularsanız nRF52840 DK, nRF52840'a programlama bölümünde açıklandığı gibi hata ayıklama bağlantı noktası üzerinden ana makineye bağlanmalıdır. Pyspinel sniffer'ı çalıştırmak için baud hızını (varsayılandan değiştirildiyse) belirtmek üzere -b işaretini kullanın ve --no-reset işaretini çıkarın.

RSSI'yi görüntülemek için Wireshark'ı yapılandırırsanız, sniffer aracını çalıştırırken --rssi işaretini de eklemeniz gerekir. Örneğin, /dev/ttyACM0 konumuna monte edilmiş bir cihazı kullanarak Wireshark çıkışına RSSI dahil edilmiş şekilde 15. kanalda dinleme yapmak için:

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

Artık Wireshark'ta bu yapılandırmayla ilgili paketleri ve ilgili protokolleri görüntüleyebilirsiniz:

Wireshark Yakalama

Pyspinel sniffer'ı çalıştırma hakkında daha fazla bilgi için Spinel sniffer referansına bakın.

Yerel USB bağlantısı

nRF52840 DK USB bağlantı noktasını kullanmak için OpenThread ot-rcp ikilisinin USB_trans ile derlenmesi gerekir:

./script/build nrf52840 USB_trans
nRF52840 DK'yı flaşlayın, USB bağlantı noktası üzerinden ana makineye bağlayın, ardından --no-reset işaretini kullanın ancak sniffer'ı çalıştırırken -b işaretini çıkarın:

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

Kaynaklar

Diğer Nordic araçları için Nordic Semiconductor — Thread Sniffer based on nRF52840 with Wireshark başlıklı makaleyi inceleyin.