Wireshark: ZeroMQを解析する
今回はZeroMQを支えるZMTPプロトコルをWiresharkでみてみる。 前回のように仮想マシン2台を立ててTCP上で PUSH/PULL する。
手順
- WiresharkのZMTP用dissectorをインストール
- tcpdumpして手元で起動したWiresharkで解析できる状態にする
- ZMTPを有効化する
- 実験用のプログラムを起動する
- Wiresharkで表示される解析結果を観察する
1. ZMTP-Wireshark(Dissector)のインストール
プラグインのREADMEに記載がある通り以下を実施する。
|
|
2. tcpdumpする
以下の様にtcpdumpした結果を標準出力に吐き出す。ローカル側ではsshの結果をパイプを経由してwiresharkに渡す。 tcpdump の書き込み先オプション(-w), wiresharkの読み込み先オプション(-i)がともに伝統的な標準入出力(-)になっている。
tcpdump の対象インタフェース(enp0s8)は事前に調べて決定している。 (VirtualBox の仮想内部ネットワークを利用する) 注目するべき事はパケットキャプチャに用いるsshが対象デバイスを通過していないということ。 通過しないためtcpdump でフィルターをかけずに済んでいる。 通過する場合は利用ポートなどでSSH通信をフィルターしないと再帰的にキャプチャされて通信量が増加する。
|
|
3. ZMTPを有効化
プラグインをインストールした直後では解析が有効化されていないので、Wiresharkの設定を変更しておく。
- 実験用のプログラムを起動する ===============================
ZeroMQでPushしたりPullしたりする。 ZMTP自体は特にportに制約がないはずだがdissectorの実装では5550-5560でしか機能しないように登録されているので範囲内のポートで実験するようにする。 (dissectorはLuaスクリプトなので簡単に変更可能)
ソースコードの雰囲気は大体下な感じ。
|
|
|
|
- Wiresharkで観察する ======================
下みたいにデータやコマンド情報が閲覧できることを確認する。