Pyspinel을 사용한 패킷 스니핑

<ph type="x-smartling-placeholder"></ph> GitHub에서 소스 보기

이 가이드에서는 Wireshark를 구성하고 Pyspinel을 실행하여 패킷을 스니프하는 방법을 설명합니다. Thread 네트워크로부터 수신됩니다

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

스니퍼 환경 설정

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

스니퍼 빌드

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

북유럽 nRF52840

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

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

전송 속도를 460800으로 설정합니다. #define UART_BAUDRATE NRF_UARTE_BAUDRATE_115200 줄을 찾습니다. src/nrf52840/transport-config.h로 대체하고 #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

다음에 설명된 대로 ot-rcp.hex 파일을 nRF52840 보드에 플래시합니다. 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를 사용하여 상태를 선택합니다. 메시 로컬 프리픽스가 나열됨 as IPv6:MeshLocalPrefix 와 유사한 wpanctl.

채널

대상 스레드 네트워크의 기기에서 채널을 가져오려면 다음을 실행하세요.

  1. OpenThread CLI 사용:

    channel
    15
    

  2. NCP와 함께 wpanctl 사용:

    wpanctl getprop NCP:Channel
    NCP:Channel = 15
    

  3. OTBR Web GUI를 사용하여 상태를 선택합니다. 채널은 NCP:Channel(wpanctl와 유사).

네트워크 키

스레드 네트워크 키는 9.1.1.1 이후에 패킷을 복호화하기 위해 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 플래그가 뒤따름 Thread Network에서 구성된 채널에 의해 패킷을 스니프할 수 있습니다.
--no-reset
기본값
이 플래그는 기본 동작을 재정의합니다.
설명
NCP에 --no-reset 플래그가 필요합니다. 기기가 네이티브 USB를 사용하여 호스트에 연결됨 연결
--crc
기본값
이 플래그는 기본 동작을 재정의합니다.
설명
--crc 플래그는 다음과 같은 플랫폼에 필요합니다. TI 및 Nordic 반도체 스레드 보드 깃발 CRC를 다시 계산하여 '잘못된 FCS' (프레임 검사) 시퀀스입니다.
-b or --baudrate
기본값
115200
설명
-b 또는 --baudrate 플래그가 사용됩니다. 기본 전송 속도를 재정의합니다. 이 값을 NCP에서 사용되는 전송 속도 빌드 (460800 권장)
--rssi
기본값
이 플래그는 기본 동작을 재정의합니다.
설명
--rssi 플래그는 RSSI가 pcap 출력에 포함됩니다. 다음과 같은 경우 이 플래그를 사용해야 합니다. TI CC24xx FCS 형식 옵션이 사용 설정되어 있는지 확인합니다.
--tap
기본값
이 플래그는 기본 동작을 재정의합니다.
설명
--tap 플래그는 다음을 지정합니다. DLT_IEEE802_15_4_TAP(283): 프레임 형식 메타데이터 (예: FCS, RSSI, LQI, 채널). 지정하지 않으면 DLT_IEEE802_15_4_WITHFCS(195)은(는) 다음에 사용됩니다. PHY 다음에 추가 RSSI 및 LQI로 기본값 TI CC24xx FCS 형식에서처럼 직접 프레임을 축소해야 합니다. 다음과 같은 경우 이 플래그를 사용해야 합니다. ITU-T CRC-16 옵션이 사용 설정되어 있는지 확인할 수 있습니다 이 옵션이 사용 설정되지 않은 경우 이 플래그를 사용하지 마세요.

스니퍼 실행

NCP용 특정 기기 경로와 NCP용 채널을 사용해야 합니다. 스니핑을 시도 중인 스레드 네트워크입니다.

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

RSSI를 표시하도록 Wireshark를 구성하는 경우 --rssi도 포함해야 합니다. 스니퍼 도구를 실행할 때 플래그를 지정합니다. 예를 들어, Wireshark 출력에 RSSI가 포함된 /dev/ttyACM0에 마운트된 기기:

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

이제 관련 패킷 및 관련 프로토콜을 볼 수 있습니다. 다음과 같이 설정합니다.

와이어샤크 캡처

자세한 내용은 스피넬 스니퍼 참조: Pyspinel 스니퍼 실행에 대해 자세히 알아보세요.

네이티브 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 — 스레드를 참조하세요. Wireshark를 사용한 nRF52840 기반의 스니퍼입니다.