
Uno strumento per ascoltare su un bus KNX tramite TPUART e la suite Calimero Project e per scaricare i dati dai pacchetti in un dump esadecimale di file compatibile con Wireshark.
KNX è un popolare protocollo di automazione degli edifici e viene utilizzato per interconnettere sensori, attuatori e altri componenti di un edificio intelligente. Il nostro strumento KNX Bus Dump utilizza la libreria Java Calimero, alla quale abbiamo contribuito per questo strumento, per registrare i telegrammi inviati su un bus KNX. In particolare, il nostro strumento accede al bus KNX attraverso una connessione TPUART, ma può essere modificato per utilizzare diversi mezzi di connessione. I telegrammi vengono riversati in un file di dump esadecimale compatibile con Wireshark. I timestamp vengono forniti e normalizzati al tempo UTC con precisione al nanosecondo per eseguire analisi dei dati e fornire una cronologia dei telegrammi. Il file di dump esadecimale può essere importato in Wireshark, che può essere configurato per dissezionare i telegrammi KNX con il dissector cEMI di Wireshark.
Il nostro strumento può essere utilizzato per l'analisi del protocollo di sensori, attuatori e altri dispositivi KNX. Ad esempio, abbiamo utilizzato lo strumento per comprendere i nostri dispositivi KNX e abbiamo trovato telegrammi KNX irregolari. Lo strumento è anche ideale per l'analisi di sicurezza dei dispositivi KNX, poiché espone tutti i dettagli del protocollo coinvolto e dei dati inviati sul bus KNX.
Tcpdump e Wireshark non possono essere utilizzati per effettuare il dump dei telegrammi inviati su un bus KNX poiché abbiamo a che fare con telegrammi KNX nativi, non con pacchetti TCP/IP. Wireshark e tcpdump possono effettuare il dump dei pacchetti KNXnet/IP, che sono pacchetti TCP/IP. KNXnet/IP è un protocollo per inviare comandi e dati a un bus KNX su una rete TCP/IP.
Questo strumento è progettato per funzionare con la libreria Java Calimero ed è compatibile con un Raspberry Pi 3 o 4 e un HAT Raspberry Pi per la connessione TPUART.
Ecco alcune guide per preparare l'ambiente:
Nota: I passaggi successivi presuppongono che tu abbia configurato il tuo ambiente secondo queste guide.
Posiziona il file KNXBusDump.java nella cartella introduction/src/main/java/ del progetto Calimero Suite.
Entra nella cartella introduction.
Per eseguire il programma, puoi semplicemente lanciare:
./gradlew run -Pcalimero.serial.tpuart.maxInterByteDelay=60000 -DmainClass=KNXBusDump
Fai riferimento alla guida alla risoluzione dei problemi qui sotto per alcune soluzioni agli errori comuni.
Ora attendi che alcuni messaggi vengano trasmessi sul bus e i telegrammi dumpati saranno nel file KNXBusDump-Telegrams.txt.
Termina lo strumento con Ctrl-C e il file è ora pronto per essere importato in Wireshark per l'analisi.
In Wireshark hai la possibilità di importare pacchetti da un dump esadecimale e specificare un dissector per analizzare il pacchetto.
All'avvio di Wireshark, attendi il completamento del caricamento iniziale. Quindi fai clic su File -> Importa da dump esadecimale...
Per analizzare correttamente questo, dobbiamo fornire un'espressione regolare (regex) con alcuni tag.
^\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]*)$
Seleziona il file di dump esadecimale come origine.
Nella nuova finestra di dialogo, passa alla scheda Espressione regolare e incolla la regex nella casella.
Assicurati che la codifica dei dati sia Hex semplice 200*16
Nella casella di testo Formato timestamp, dobbiamo specificare il pattern generato dallo strumento.
%Y-%m-%dT%H:%M:%S.%fZ
NOTA: Il formato del timestamp DEVE essere ESATTAMENTE QUESTO. Altrimenti, non verrà estratto alcun timestamp.
Nella sezione Incapsulamento, cambia Tipo di incapsulamento in Wireshark Upper PDU Export.
Spunta ExportPDU per specificare il dissector cemi.
Ora puoi importare il file e analizzare il telegramma.
Timestamp di Wireshark:

File di dump esadecimale corrispondente

Nota: L'ora evidenziata è il TEMPO UTC NORMALIZZATO. Indipendentemente dal fuso orario indicato accanto all'ora, sarà SEMPRE l'ora corretta in UTC.

Considerazioni:
Questi sono alcuni errori comuni che possono verificarsi quando si esegue questo programma con questa guida. Ho fornito soluzioni nella speranza che risolvano l'errore.
Assicurati di digitare esattamente tutti i comandi. Eseguire il comando con "Dmainclass" farà sì che il programma utilizzi come predefinito il programma Discover KNX Servers. Assicurati che sia "DmainClass"
Assicurati che KNXD (se lo hai installato secondo queste guide) non sia in esecuzione. Se segui questa guida, KNXD utilizzerà la stessa porta e solo un processo può utilizzare la porta seriale alla volta.
Se hai copiato e incollato il contenuto dei file di dump esadecimale da sopra, potrebbe mancare un carattere di nuova riga extra. Ad esempio, in "SampleData1.txt", la rappresentazione su GitHub mostra 4 righe di dati quando in realtà sono 4 righe di dati più un carattere di nuova riga. Quindi una possibile opzione è premere semplicemente "Invio" dopo l'ultimo byte di dati nel file che stai importando.
In questo repository ho fornito i dati di esempio nel file Sample-KNXBusDump-Telegrams.txt che è stato utilizzato per creare gli screenshot. Sentiti libero di importarlo in Wireshark per testarlo tu stesso.
Lo strumento è stato testato su questo banco di prova KNX locale.
