Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

피스피넬을 통한 패킷 스니핑

GitHub에서 소스 보기

이 가이드에서는 스레드 네트워크에서 패킷을 스니핑하도록 Wireshark를 구성하고 Pyspinel을 실행하는 방법을 설명합니다.

패킷 스니핑에 Wireshark extcap 플러그인을 사용하려면 extcap을 사용한 패킷 스니핑을 참조하세요.

스니퍼 환경 설정

시작하기 전에 다음 단계를 완료하세요.

스니퍼 만들기

ot-rcp 바이너리 출력을 사용하여 스니퍼 역할을 하는 NCP 기기를 빌드하고 플래시합니다.

북유럽 nRF52840

스니퍼로 사용할 Nordic nRF52840 예시를 설정하려면 openthread/ot-nrf528xx를 클론하고 빌드 환경을 설정합니다.

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

전송 속도를 460800으로 설정합니다. src/nrf52840/transport-config.h에서 #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 줄을 찾아 #define UART_BAUDRATE NRF_UARTE_BAUDRATE_460800로 바꿉니다.

바이너리를 빌드합니다.

./script/build nrf52840 UART_trans

ot-rcp 바이너리 출력을 16진수로 변환합니다.

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

nRF52840 플래시에 설명된 대로 ot-rcp.hex 파일을 nRF52840 보드에 플래시합니다.

디버그 포트를 사용할 때 데이터 손상이나 손실을 방지하기 위해 nRF52840에서 대규모 저장소 기기 (MSD)를 사용 중지합니다.

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 스니퍼를 실행하는 데 필요합니다.

메시 로컬 프리픽스

대상 스레드 네트워크의 기기에서 메시 로컬 프리픽스를 가져오려면 다음 단계를 따르세요.

  1. OpenThread CLI 사용:

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

  2. NCP와 함께 wpanctl 사용:

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

  3. OTBR Web GUI를 사용하여 상태를 선택합니다. 메시 로컬 프리픽스는 wpanctl와 비슷한 IPv6:MeshLocalPrefix로 나열됩니다.

채널

타겟 스레드 네트워크의 기기에서 채널을 가져오려면 다음 단계를 따르세요.

  1. OpenThread CLI 사용:

    channel
    15
    

  2. NCP와 함께 wpanctl 사용:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. OTBR Web GUI를 사용하여 상태를 선택합니다. 채널은 wpanctl와 유사하게 NCP:Channel로 나열됩니다.

네트워크 키

스레드 네트워크 키는 Wireshark에서 캡처 후 패킷을 복호화하는 데 사용됩니다. 타겟 스레드 네트워크의 기기에서 네트워크 키를 가져오는 방법은 다음과 같습니다.

  1. OpenThread CLI 사용:

    networkkey
    33334444333344443333444433334444
    

  2. NCP와 함께 wpanctl 사용:

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

스레드 네트워크 키는 OTBR 웹 GUI에서 사용할 수 없습니다.

스니퍼 옵션

옵션
-u or --uart
기본값
없음 - 소켓 연결이 아닌 직렬 연결로 기기를 사용하는 경우 제공해야 합니다.
설명
-u 또는 --uart 플래그 뒤에 /dev/ttyUSB0와 같은 기기 경로가 오는 경우
-c or --channel
기본값
11
설명
-c 또는 --channel 플래그 뒤에 패킷을 스니핑하기 위해 스레드 네트워크에 구성된 채널이 뒤따릅니다.
--no-reset
기본값
이 플래그는 기본 동작을 재정의합니다.
설명
NCP 기기가 기본 USB 연결로 호스트에 연결되어 있으면 --no-reset 플래그가 필요합니다.
--crc
기본값
이 플래그는 기본 동작을 재정의합니다.
설명
--crc 플래그는 TI 및 Nordic Semiconductor Thread 보드와 같은 플랫폼에 필요합니다. 이 플래그는 Wireshark에서 'Bad FCS' (프레임 확인 순서) 경고를 방지하기 위해 CRC를 다시 계산합니다.
-b or --baudrate
기본값
115200
설명
-b 또는 --baudrate 플래그는 기본 전송 속도를 재정의하는 데 사용됩니다. 이 값을 NCP 빌드에서 사용하는 전송 속도와 동일한 값으로 설정합니다 (권장 460800).
--rssi
기본값
이 플래그는 기본 동작을 재정의합니다.
설명
--rssi 플래그는 RSSI가 pcap 출력에 포함되도록 합니다. Wireshark에서 TI CC24xx FCS 형식 옵션이 사용 설정된 경우 이 플래그를 사용해야 합니다.
--tap
기본값
이 플래그는 기본 동작을 재정의합니다.
설명
--tap 플래그는 메타데이터가 있는 TLV (예: FCS, RSSI, LQI, Channel)를 포함하는 유사 헤더가 있는 프레임 형식에 DLT_IEEE802_15_4_TAP(283)을 지정합니다. 지정되지 않은 경우 DLT_IEEE802_15_4_WITHFCS(195)가 TI CC24xx FCS 형식에서처럼 PHY 프레임 바로 뒤에 추가 RSSI 및 LQI와 함께 기본적으로 사용됩니다. Wireshark에서 ITU-T CRC-16 옵션이 사용 설정된 경우 이 플래그를 사용해야 합니다. Wireshark에서 이 옵션을 사용 설정하지 않은 경우에는 이 플래그를 사용하지 마세요.

스니퍼 실행

NCP의 특정 기기 경로와 스니프하려는 스레드 네트워크의 채널을 사용해야 합니다.

이 가이드를 따르는 경우 nRF52840 플래시에 설명된 대로 디버그 포트로 nRF52840 DK를 호스트 머신에 연결해야 합니다. Pyspinel 스니퍼를 실행하려면 -b 플래그를 사용하여 전송 속도를 지정 (기본값에서 변경된 경우)하고 --no-reset 플래그를 생략합니다.

RSSI를 표시하도록 Wireshark를 구성하는 경우 스니퍼 도구를 실행할 때 --rssi 플래그도 포함해야 합니다. 예를 들어 Wireshark 출력에 포함된 RSSI가 있는 /dev/ttyACM0에 마운트된 기기를 사용하여 Channel 15에서 스니프를 실행하려면 다음을 따르세요.

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

이제 Wireshark에서 이 구성의 패킷 및 관련 프로토콜을 볼 수 있습니다.

Wireshark 캡처

Pyspinel 스니퍼 실행에 대한 자세한 내용은 Spinel 스니퍼 참조를 확인하세요.

네이티브 USB 연결

nRF52840 DK USB 포트를 사용하려면 OpenThread ot-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 도구에 관한 내용은 Nordic Semiconductor — WiRshark를 사용한 nRF52840 기반의 스니퍼를 참조하세요.