이 가이드에서는 Wireshark를 구성하고 Pyspinel을 실행하여 스레드 네트워크에서 패킷을 스니핑하는 방법을 설명합니다.
패킷 스니핑에 Wireshark extcap 플러그인을 사용하려면 extcap을 사용하여 패킷 스니핑을 참조하세요.
스니퍼 환경 설정
시작하기 전에 다음 단계를 완료하세요.
스니퍼 빌드
스니퍼 역할을 하는 NCP 기기를 빌드하고 플래시하며 ot-rcp
바이너리 출력을 사용합니다.
북유럽 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 스니퍼를 실행하는 데 필요합니다.
메시 로컬 프리픽스
대상 스레드 네트워크의 기기에서 메시 로컬 프리픽스를 가져오는 방법은 다음과 같습니다.
OpenThread CLI 사용:
dataset active
Mesh Local Prefix: fd33:3333:3344:0/64NCP와 함께
wpanctl
사용:wpanctl getprop IPv6:MeshLocalPrefix
IPv6:MeshLocalPrefix = "fd33:3333:3344:0::/64"OTBR 웹 GUI를 사용하여 상태를 선택합니다. 메시 로컬 프리픽스는
wpanctl
와 마찬가지로 IPv6:MeshLocalPrefix로 표시됩니다.
채널
대상 스레드 네트워크의 기기에서 채널을 가져오는 방법은 다음과 같습니다.
OpenThread CLI 사용:
channel
15NCP와 함께
wpanctl
사용:wpanctl getprop NCP:Channel
NCP:Channel = 15OTBR 웹 GUI를 사용하여 상태를 선택합니다. 채널은
wpanctl
와 비슷하게 NCP:Channel로 나열됩니다.
네트워크 키
스레드 네트워크 키는 Wireshark에서 캡처 후 패킷을 복호화하는 데 사용됩니다. 타겟 스레드 네트워크의 기기에서 네트워크 키를 가져오는 방법은 다음과 같습니다.
OpenThread CLI 사용:
networkkey
33334444333344443333444433334444NCP와 함께
wpanctl
사용:wpanctl getprop Network:Key
Network:Key = [33334444333344443333444433334444]
스레드 네트워크 키는 OTBR 웹 GUI에서 사용할 수 없습니다.
스니퍼 옵션
옵션 | |||||
---|---|---|---|---|---|
-u or --uart |
|
||||
-c or --channel |
|
||||
--no-reset |
|
||||
--crc |
|
||||
-b or --baudrate |
|
||||
--rssi |
|
||||
--tap |
|
스니퍼 실행
NCP의 특정 기기 경로와 스니핑하려는 스레드 네트워크의 채널을 사용해야 합니다.
이 가이드를 따르면 nRF52840 플래시에 설명된 대로 nRF52840 DK를 디버그 포트로 호스트 머신에 연결해야 합니다. 피스핀 스니퍼를 실행하려면 -b
플래그를 사용하여 변조 속도를 지정하고 (기본값에서 변경된 경우) --no-reset
플래그를 생략합니다.
RSSI를 표시하도록 Wireshark를 구성하는 경우 스니퍼 도구를 실행할 때 --rssi
플래그도 포함해야 합니다. 예를 들어 Wireshark 출력에 포함된 RSSI를 사용하여 /dev/ttyACM0
에 마운트된 기기를 사용하여 채널 15에서 스니핑하려면 다음을 실행합니다.
cd path-to-pyspinel
python sniffer.py -c 15 -u /dev/ttyACM0 --crc --rssi -b 460800 | wireshark -k -i -
이제 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 — nRF52840 기반 Wireshark 기반 스니퍼를 참고하세요.