
KNX 버스에서 TPUART와 Calimero Project 스위트를 통해 수신하고 패킷에서 데이터를 Wireshark 호환 파일 hex 덤프로 덤프하는 도구입니다.
KNX는 인기 있는 빌딩 자동화 프로토콜로, 스마트 빌딩의 센서, 액추에이터 및 기타 구성 요소를 상호 연결하는 데 사용됩니다. KNX 버스 덤프 도구는 Calimero 자바 라이브러리(이 도구를 위해 기여한)를 사용하여 KNX 버스를 통해 전송되는 텔레그램을 기록합니다. 특히, 이 도구는 TPUART 연결을 통해 KNX 버스에 액세스하지만 다른 연결 매체를 사용하도록 변경할 수 있습니다. 텔레그램은 Wireshark 호환 16진수 덤프 파일로 덤프됩니다. 타임스탬프는 제공되며 나노초 정밀도의 UTC 시간으로 정규화되어 데이터 분석 및 텔레그램의 타임라인을 제공합니다. 16진수 덤프 파일은 Wireshark로 가져올 수 있으며, Wireshark의 cEMI 디섹터를 사용하여 KNX 텔레그램을 분석하도록 구성할 수 있습니다.
이 도구는 KNX 센서, 액추에이터 및 기타 KNX 장치의 프로토콜 분석에 사용할 수 있습니다. 예를 들어, 이 도구를 사용하여 KNX 장치를 이해하고 비정상적인 KNX 텔레그램을 발견했습니다. 또한 이 도구는 KNX 버스를 통해 전송되는 관련 프로토콜 및 데이터의 모든 세부 정보를 노출하므로 KNX 장치의 보안 분석에 이상적입니다.
Tcpdump와 Wireshark는 기본 KNX 텔레그램( TCP/IP 패킷이 아님)을 다루기 때문에 KNX 버스를 통해 전송되는 텔레그램을 덤프하는 데 사용할 수 없습니다. Wireshark와 tcpdump는 TCP/IP 패킷인 KNXnet/IP 패킷을 덤프할 수 있습니다. KNXnet/IP는 TCP/IP 네트워크를 통해 KNX 버스에 명령과 데이터를 보내기 위한 프로토콜입니다.
이 도구는 Calimero Java 라이브러리와 함께 작동하도록 설계되었으며, TPUART 연결을 위해 Raspberry Pi 3 또는 4와 Raspberry Pi HAT와 호환됩니다.
환경 설정을 위한 몇 가지 가이드는 다음과 같습니다.
참고: 다음 단계는 이 가이드에 따라 환경을 설정했다고 가정합니다.
KNXBusDump.java 파일을 Calimero 프로젝트 스위트의 introduction/src/main/java/ 폴더에 넣습니다.
introduction 폴더로 이동합니다.
프로그램을 실행하려면 다음을 실행하면 됩니다.
./gradlew run -Pcalimero.serial.tpuart.maxInterByteDelay=60000 -DmainClass=KNXBusDump
일반적인 오류 해결 방법은 아래 문제 해결 가이드를 참조하세요.
이제 버스에서 메시지가 전송될 때까지 기다리면 덤프된 텔레그램이 KNXBusDump-Telegrams.txt 파일에 저장됩니다.
Ctrl-C를 사용하여 도구를 취소하면 파일을 Wireshark로 가져와 분석할 준비가 완료됩니다.
Wireshark에서는 16진수 덤프에서 패킷을 가져오고 디섹터를 지정하여 패킷을 분석할 수 있습니다.
Wireshark를 시작한 후 초기 로딩이 완료될 때까지 기다립니다. 그런 다음 File -> Import From Hex Dump... 를 클릭합니다.
이를 올바르게 구문 분석하려면 태그가 있는 정규 표현식(regex)을 제공해야 합니다.
^\s*(?<time>\d{4}-\d\d\-\d\dT(\d\d\:){2}\d\d.(\d){6}[Z])\s(?<seqno>\d{6})\s+(?<data>[0-9a-fA-F]*)$
소스로 16진수 덤프 파일을 선택합니다.
새 대화 상자에서 Regular Expression 탭으로 변경하고 상자에 정규 표현식을 붙여넣습니다.
데이터 인코딩이 Plain hex 인지 확인합니다.
Timestamp format 텍스트 상자에 도구에서 생성된 패턴을 지정해야 합니다.
%Y-%m-%dT%H:%M:%S.%fZ
참고: 타임스탬프 형식은 반드시 이 형식과 정확히 동일해야 합니다. 그렇지 않으면 타임스탬프가 구문 분석되지 않습니다.
Encapsulation 섹션에서 Encapsulation Type 을 Wireshark Upper PDU Export 로 변경합니다.
ExportPDU 를 선택하고 cemi 디섹터를 지정합니다.
이제 파일을 가져와 텔레그램을 분석할 수 있습니다.
Wireshark 타임스탬프:
해당 16진수 덤프 파일
참고: 강조 표시된 시간은 정규화된 UTC 시간입니다. 시간 옆에 표시된 시간대와 관계없이 항상 올바른 UTC 시간입니다.
고려 사항:
이 설정 가이드에 따라 프로그램을 실행할 때 발생할 수 있는 일반적인 오류입니다. 오류를 해결하는 데 도움이 되길 바라는 해결 방법을 제공합니다.
모든 명령을 정확히 입력했는지 확인하세요. "Dmainclass"로 명령을 실행하면 기본적으로 Discover KNX Servers 프로그램이 실행됩니다. 반드시 "DmainClass"여야 합니다.
KNXD(이 가이드에 따라 설치한 경우)가 실행 중이 아닌지 확인하세요. 이 가이드를 따르는 경우 KNXD가 동일한 포트를 사용하고 있으며 한 번에 하나의 프로세스만 직렬 포트를 사용할 수 있습니다.
위에서 16진수 덤프 파일의 내용을 복사하여 붙여넣은 경우 추가 개행 문자가 누락되었을 수 있습니다. 예를 들어 "SampleData1.txt"의 경우 GitHub 표현에는 4줄의 데이터가 표시되지만 실제로는 4줄의 데이터 와 개행 문자입니다. 따라서 한 가지 가능한 해결 방법은 가져오는 파일의 마지막 데이터 바이트 뒤에 "Enter" 키를 누르는 것입니다.
이 저장소에는 스크린샷을 만드는 데 사용된 샘플 파일 데이터가 Sample-KNXBusDump-Telegrams.txt 에 포함되어 있습니다. 직접 테스트하려면 이 파일을 Wireshark로 가져오시기 바랍니다.
이 도구는 로컬 KNX 테스트베드에서 테스트되었습니다.
