
TPUARTおよびCalimero Projectスイートを介してKNXバスをリッスンし、パケットのデータをWireshark互換のファイルhexダンプにダンプするツール。
KNX は、ビルオートメーションプロトコルとして広く利用されており、スマートビルのセンサー、アクチュエーター、その他のコンポーネントを相互接続するために使用されます。当社の KNX バスダンプツールは、このツールのためにコントリビュートした Calimero Java ライブラリを使用して、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 は KNXnet/IP パケット(TCP/IP パケット)をダンプできます。KNXnet/IP は、TCP/IP ネットワーク経由で KNX バスにコマンドやデータを送信するためのプロトコルです。
このツールは Calimero Java ライブラリと連携するように設計されており、Raspberry Pi 3 または 4、および TPUART 接続用の 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 が同じポートを使用するため、シリアルポートは一度に1つのプロセスのみが使用できます。
上記の16進ダンプファイルの内容をコピー&ペーストした場合、追加の改行文字が不足している可能性があります。例えば、"SampleData1.txt" では、GitHub 上の表示は4行のデータですが、実際は4行のデータに加えて改行文字があります。そのため、インポートするファイルのデータの最後のバイトの後に "Enter" キーを押すだけで解決する場合があります。
このリポジトリには、スクリーンショットを作成するために使用したサンプルファイルデータを Sample-KNXBusDump-Telegrams.txt として提供しています。これを Wireshark にインポートして、ご自身でテストしてみてください。
このツールは、以下のローカル KNX テストベッドでテストされました。
