
Uma ferramenta para escutar em um barramento KNX via TPUART e a suite Calimero Project e para despejar os dados dos pacotes em um dump hexadecimal de arquivo compatível com Wireshark.
KNX é um protocolo popular de automação predial e é usado para interconectar sensores, atuadores e outros componentes de um edifício inteligente. Nossa ferramenta KNX Bus Dump utiliza a biblioteca Java Calimero, para a qual contribuímos para o desenvolvimento desta ferramenta, para gravar os telegramas enviados por um barramento KNX. Particularmente, nossa ferramenta acessa o barramento KNX através de uma conexão TPUART, mas pode ser alterada para usar diferentes meios de conexão. Os telegramas são despejados em um arquivo de hex dump compatível com o Wireshark. Os timestamps são fornecidos e normalizados para o horário UTC com precisão de nanossegundos para realizar análise de dados e fornecer uma linha do tempo dos telegramas. O arquivo de hex dump pode ser importado para o Wireshark, que pode ser configurado para dissecar os telegramas KNX com o dissecador cEMI do Wireshark.
Nossa ferramenta pode ser usada para análise de protocolo de sensores, atuadores e outros dispositivos KNX. Por exemplo, usamos a ferramenta para entender nossos dispositivos KNX e encontramos telegramas KNX irregulares. A ferramenta também é ideal para análise de segurança de dispositivos KNX, pois expõe todos os detalhes do protocolo envolvido e dos dados enviados pelo barramento KNX.
Tcpdump e Wireshark não podem ser usados para despejar telegramas enviados por um barramento KNX, pois estamos lidando com telegramas KNX nativos, não com pacotes TCP/IP. O Wireshark e o tcpdump podem despejar pacotes KNXnet/IP, que são pacotes TCP/IP. KNXnet/IP é um protocolo para enviar comandos e dados para um barramento KNX através de uma rede TCP/IP.
Esta ferramenta foi projetada para funcionar com a biblioteca Java Calimero e é compatível com um Raspberry Pi 3 ou 4 e um Raspberry Pi HAT para a conexão TPUART.
Aqui estão alguns guias para configurar o ambiente:
Nota: As próximas etapas presumirão que você configurou seu ambiente de acordo com esses guias.
Coloque o arquivo KNXBusDump.java na pasta introduction/src/main/java/ do suite do projeto Calimero.
Entre na pasta introduction.
Para executar o programa, basta executar:
./gradlew run -Pcalimero.serial.tpuart.maxInterByteDelay=60000 -DmainClass=KNXBusDump
Consulte o guia de solução de problemas abaixo para algumas soluções de erros comuns.
Agora, aguarde algumas mensagens serem transmitidas no barramento e os telegramas despejados estarão no arquivo KNXBusDump-Telegrams.txt.
Cancele a ferramenta usando Ctrl-C e o arquivo estará pronto para ser importado no Wireshark para análise.
No Wireshark, você tem a capacidade de importar pacotes de um hex dump e especificar um dissecador para analisar o pacote.
Ao iniciar o Wireshark, aguarde o carregamento inicial terminar. Em seguida, clique em File -> Import From Hex Dump...
Para fazer o parsing corretamente, precisamos fornecer uma expressão regular (regex) com algumas tags.
^\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]*)$
Escolha o arquivo hex dump como fonte.
No novo diálogo, vá para a guia Regular Expression e cole a regex na caixa.
Certifique-se de que a codificação dos dados é Plain hex 200*16
Na caixa de texto Timestamp format, precisamos especificar o padrão gerado pela ferramenta.
%Y-%m-%dT%H:%M:%S.%fZ
OBSERVAÇÃO: O formato do timestamp DEVE ser EXATAMENTE IGUAL a este. Caso contrário, não haverá um timestamp parseado.
Na seção Encapsulation, altere Encapsulation Type para Wireshark Upper PDU Export.
Marque ExportPDU para especificar o dissecador cemi.
Agora você pode importar o arquivo e analisar o telegrama.
Timestamp do Wireshark:
Arquivo Hex Dump Correspondente
Nota: O tempo destacado é o TEMPO UTC NORMALIZADO. Não importa qual fuso horário esteja ao lado do horário, ele será SEMPRE o horário correto em UTC.
Considerações:
Estes são alguns erros comuns que podem ocorrer ao executar este programa com este guia de configuração. Forneci soluções na esperança de corrigir o erro.
Certifique-se de digitar todos os comandos exatamente. Executar o comando com "Dmainclass" fará com que o programa use o padrão do programa Discover KNX Servers. Certifique-se de que seja "DmainClass"
Certifique-se de que o KNXD (se você o tiver instalado de acordo com esses guias) não está em execução. Se estiver seguindo este guia, o KNXD estará usando a mesma porta e apenas um processo pode usar a porta serial por vez.
Se você copiou e colou o conteúdo dos arquivos hex dump acima, pode estar faltando um caractere de nova linha extra. Por exemplo, em "SampleData1.txt", a representação do github mostra 4 linhas de dados quando na realidade são 4 linhas de dados mais um caractere de nova linha. Então, uma opção possível é simplesmente pressionar 'Enter' após o último byte de dados no arquivo que você está importando.
Neste repositório, forneci os dados do arquivo de exemplo em Sample-KNXBusDump-Telegrams.txt que foram usados para criar as capturas de tela. Sinta-se à vontade para importar isso no Wireshark para testar você mesmo.
A ferramenta foi testada neste testbed KNX local.
