
Un outil pour écouter un bus KNX via TPUART et la suite Calimero Project et pour extraire les données des paquets dans un fichier hex dump compatible Wireshark.
KNX est un protocole populaire d'automatisation des bâtiments, utilisé pour interconnecter capteurs, actionneurs et autres composants d'un bâtiment intelligent. Notre outil KNX Bus Dump utilise la bibliothèque Java Calimero, à laquelle nous avons contribué pour cet outil, afin d'enregistrer les télégrammes envoyés sur un bus KNX. Plus particulièrement, notre outil accède au bus KNX via une connexion TPUART mais peut être modifié pour utiliser différents supports de connexion. Les télégrammes sont vidés dans un fichier hexadécimal compatible avec Wireshark. Les horodatages sont fournis et normalisés en temps UTC avec une précision de la nanoseconde pour effectuer une analyse des données et fournir une chronologie des télégrammes. Le fichier hexadécimal peut être importé dans Wireshark, qui peut être configuré pour disséquer les télégrammes KNX avec le dissecteur cEMI de Wireshark.
Notre outil peut être utilisé pour l'analyse de protocole des capteurs, actionneurs et autres dispositifs KNX. Par exemple, nous avons utilisé l'outil pour comprendre nos dispositifs KNX et avons trouvé des télégrammes KNX irréguliers. L'outil est également idéal pour l'analyse de sécurité des dispositifs KNX car il expose tous les détails du protocole impliqué et des données envoyées sur le bus KNX.
Tcpdump et Wireshark ne peuvent pas être utilisés pour vider les télégrammes envoyés sur un bus KNX car nous traitons de télégrammes KNX natifs, et non de paquets TCP/IP. Wireshark et tcpdump peuvent vider les paquets KNXnet/IP, qui sont des paquets TCP/IP. KNXnet/IP est un protocole pour envoyer des commandes et des données à un bus KNX via un réseau TCP/IP.
Cet outil est conçu pour fonctionner avec la bibliothèque Java Calimero et est compatible avec un Raspberry Pi 3 ou 4 et un Raspberry Pi HAT pour la connexion TPUART.
Voici quelques guides pour configurer l'environnement :
Remarque : Les étapes suivantes supposent que vous avez configuré votre environnement selon ces guides.
Placez le fichier KNXBusDump.java dans le dossier introduction/src/main/java/ de la suite du projet Calimero.
Déplacez-vous dans le dossier introduction.
Pour exécuter le programme, lancez simplement :
./gradlew run -Pcalimero.serial.tpuart.maxInterByteDelay=60000 -DmainClass=KNXBusDump
Reportez-vous au guide de dépannage ci-dessous pour quelques solutions aux erreurs courantes.
Maintenant, attendez que des messages soient transmis sur le bus ; les télégrammes vidés se trouveront dans le fichier KNXBusDump-Telegrams.txt.
Annulez l'outil avec Ctrl-C ; le fichier est maintenant prêt à être importé dans Wireshark pour être analysé.
Dans Wireshark, vous avez la possibilité d'importer des paquets à partir d'un vidage hexadécimal et de spécifier un dissecteur pour analyser le paquet.
Au démarrage de Wireshark, attendez la fin du chargement initial. Ensuite, cliquez sur Fichier -> Importer depuis un vidage hexadécimal...
Pour analyser correctement cela, nous devons fournir une expression régulière (regex) avec quelques balises.
^\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]*)$
Choisissez le fichier de vidage hexadécimal comme source.
Dans la nouvelle boîte de dialogue, allez dans l'onglet Expression régulière et collez la regex dans la zone.
Assurez-vous que l'encodage des données est Hexadécimal simple
Dans la zone de texte Format d'horodatage, nous devons spécifier le modèle généré par l'outil.
%Y-%m-%dT%H:%M:%S.%fZ
REMARQUE : Le format d'horodatage DOIT ÊTRE EXACTEMENT CELUI-CI. Sinon, aucun horodatage ne sera extrait.
Dans la section Encapsulation, changez le Type d'encapsulation en Exportation PDU supérieure Wireshark.
Cochez ExportPDU pour spécifier le dissecteur cemi.
Vous êtes maintenant en mesure d'importer le fichier et d'analyser le télégramme.
Horodatage Wireshark :
Fichier de vidage hexadécimal correspondant
Remarque : L'heure surlignée est l'HEURE UTC NORMALISÉE. Quel que soit le fuseau horaire indiqué à côté de l'heure, ce sera TOUJOURS la bonne heure en UTC.
Considérations :
Voici quelques erreurs courantes qui peuvent survenir lors de l'exécution de ce programme avec ce guide d'installation. J'ai fourni des solutions dans l'espoir qu'elles corrigent l'erreur.
Assurez-vous de taper toutes les commandes exactement. L'exécution de la commande avec "Dmainclass" fera basculer le programme vers le programme Découverte des serveurs KNX. Assurez-vous que c'est "DmainClass"
Assurez-vous que KNXD (si vous l'avez installé selon ces guides) n'est pas en cours d'exécution. Si vous suivez ce guide, KNXD utilisera ce même port et un seul processus peut utiliser le port série à la fois.
Si vous avez copié-collé le contenu des fichiers de vidage hexadécimal ci-dessus, il se peut qu'il manque un caractère de nouvelle ligne supplémentaire. Par exemple, dans "SampleData1.txt", la représentation GitHub montre 4 lignes de données alors qu'en réalité il y a 4 lignes de données plus un caractère de nouvelle ligne. Une option possible est donc d'appuyer simplement sur "Entrée" après le dernier octet de données dans le fichier que vous importez.
Dans ce dépôt, j'ai fourni les données de fichier exemple dans Sample-KNXBusDump-Telegrams.txt qui ont été utilisées pour créer les captures d'écran. N'hésitez pas à importer ce fichier dans Wireshark pour le tester vous-même.
L'outil a été testé sur ce banc d'essai KNX local.
