
Una herramienta para escuchar en un bus KNX a través de TPUART y la suite Calimero Project y volcar los datos de los paquetes a un volcado hexadecimal de archivo compatible con Wireshark.
KNX es un protocolo popular de automatización de edificios y se utiliza para interconectar sensores, actuadores y otros componentes de un edificio inteligente. Nuestra herramienta KNX Bus Dump utiliza la biblioteca Java Calimero, a la que contribuimos para esta herramienta, para registrar los telegramas enviados a través de un bus KNX. En particular, nuestra herramienta accede al bus KNX a través de una conexión TPUART, pero se puede modificar para usar diferentes medios de conexión. Los telegramas se vuelcan en un archivo de volcado hexadecimal compatible con Wireshark. Las marcas de tiempo se proporcionan y se normalizan a la hora UTC con precisión de nanosegundos para realizar análisis de datos y proporcionar una línea de tiempo de los telegramas. El archivo de volcado hexadecimal se puede importar a Wireshark, el cual se puede configurar para analizar los telegramas KNX con el disector cEMI de Wireshark.
Nuestra herramienta se puede utilizar para el análisis de protocolos de sensores, actuadores y otros dispositivos KNX. Por ejemplo, usamos la herramienta para entender nuestros dispositivos KNX y encontramos telegramas KNX irregulares. La herramienta también es ideal para el análisis de seguridad de dispositivos KNX, ya que expone todos los detalles del protocolo involucrado y los datos enviados a través del bus KNX.
Tcpdump y Wireshark no se pueden usar para volcar telegramas enviados a través de un bus KNX, ya que estamos tratando con telegramas KNX nativos, no con paquetes TCP/IP. Wireshark y tcpdump pueden volcar paquetes KNXnet/IP, que son paquetes TCP/IP. KNXnet/IP es un protocolo para enviar comandos y datos a un bus KNX a través de una red TCP/IP.
Esta herramienta está diseñada para funcionar con la biblioteca Java Calimero y es compatible con una Raspberry Pi 3 o 4 y un HAT de Raspberry Pi para la conexión TPUART.
Aquí hay algunas guías para configurar el entorno:
Nota: Los siguientes pasos asumirán que configuró su entorno de acuerdo con estas guías.
Coloque el archivo KNXBusDump.java en la carpeta introduction/src/main/java/ del proyecto Calimero Suite.
Cambie a la carpeta introduction.
Para ejecutar el programa, simplemente ejecute:
./gradlew run -Pcalimero.serial.tpuart.maxInterByteDelay=60000 -DmainClass=KNXBusDump
Consulte la guía de solución de problemas a continuación para algunas soluciones de errores comunes.
Ahora, espere a que se transmitan algunos mensajes en el bus y los telegramas volcados estarán en el archivo KNXBusDump-Telegrams.txt.
Cancele la herramienta usando Ctrl-C y el archivo ahora está listo para ser importado a Wireshark para su análisis.
En Wireshark, tiene la capacidad de importar paquetes desde un volcado hexadecimal y especificar un disector para analizar el paquete.
Al iniciar Wireshark, espere a que termine la carga inicial. Luego haga clic en Archivo -> Importar desde volcado hexadecimal...
Para analizar esto correctamente, necesitamos proporcionar una expresión regular (regex) con algunas etiquetas.
^\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]*)$
Elija el archivo de volcado hexadecimal como fuente.
En el nuevo diálogo, cambie a la pestaña Expresión regular y pegue la regex en el cuadro.
Asegúrese de que la codificación de datos sea Hex plano 200*16
En el cuadro de texto Formato de marca de tiempo, debemos especificar el patrón generado por la herramienta.
%Y-%m-%dT%H:%M:%S.%fZ
NOTA: El formato de marca de tiempo DEBE ser EXACTAMENTE IGUAL a este. De lo contrario, no se analizará la marca de tiempo.
En la sección Encapsulación, cambie Tipo de encapsulación a Exportación PDU superior de Wireshark.
Marque ExportPDU para especificar el disector cemi.
Ahora puede importar el archivo y analizar el telegrama.
Marca de tiempo de Wireshark:

Archivo de volcado hexadecimal correspondiente

Nota: La hora resaltada es la HORA UTC NORMALIZADA. Sin importar la zona horaria que se muestre junto a la hora, SIEMPRE será la hora correcta en UTC.

Consideraciones:
Estos son algunos errores comunes que pueden ocurrir al ejecutar este programa con esta guía de configuración. He proporcionado soluciones con la esperanza de que solucionen el error.
Asegúrese de escribir todos los comandos exactamente. Ejecutar el comando con "Dmainclass" hará que el programa use por defecto el programa Discover KNX Servers. Asegúrese de que sea "DmainClass"
Asegúrese de que KNXD (si lo tiene instalado según estas guías) no esté en ejecución. Si sigue esta guía, entonces KNXD estará usando ese mismo puerto y solo un proceso puede usar el puerto serie a la vez.
Si copió y pegó el contenido de los archivos de volcado hexadecimal de arriba, podría faltar un carácter de nueva línea adicional. Por ejemplo, en "SampleData1.txt", la representación de GitHub muestra 4 líneas de datos cuando en realidad son 4 líneas de datos más un carácter de nueva línea. Por lo tanto, una posible opción es simplemente presionar "Enter" después del último byte de datos en el archivo que está importando.
En este repositorio, he proporcionado los datos de archivo de muestra en Sample-KNXBusDump-Telegrams.txt que se usaron para crear las capturas de pantalla. No dude en importarlos a Wireshark para probarlo usted mismo.
La herramienta fue probada en este banco de pruebas KNX local.
