ネットワークエンジニアとして働いてるエンジニアには必須のツールのWiresharkについて。 仕事上Wiresharkが標準ではサポートしていないプロトコルを扱う事があるかもしれません。そんな時 WiresharkはタダのHEXデータを表示してくれるだけですが、ちょっとしたC言語とUnixの知識があれば Wiresharkの機能を拡張して独自のプロトコルのデコーダを追加する事ができます。

ここでは独自プロトコルのデコーダをASN1ファイルを元に自分でWiresharkを追加する方法を簡単に解説します。

Step1.

ソースコードをWireshak本家からダウンロード

ここでは例としてwireshark-1.0.5を使います。

Step2.

コンパイルに必要なツールの準備
以下のツールが必要になりますのでそれぞれのサイトからダウンロードしてインストールして下さい。

  • VC++
    ここでは例としてMicrosoft Visual C++ 2005 Express Editionを使います。

  • Windows Platfrom SDK

  • Cygwin

  • Python


    Step3.

    Step1でダウンロードしたソースをcygiwn上等で展開して~/wireshark-1.0.5/config.nmakeをStep2で準備した開発環境に合わせて修正します。 たとえば以下の様に使用するコンパイラの部分のコメントをはずします。
    # "Microsoft Visual C++ 2005 Express Edition"
    # needs additional Platform SDK installation
    # Visual C++ 8.0, _MSC_VER 1400, msvcr80.dll
    MSVC_VARIANT=MSVC2005EE
    
    またVERSION_EXTRAの部分に適当なラベルを入れてバージョンに自分の好きな文字を追加できます。

    Step4.

    開発環境の整備
    DOS窓を開き以下のコマンドを打ちます。

    Call "C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\SetEnv.Cmd" /2000
    Call "C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"

    その後以下のコマンドでさらに開発に必要なツールを整えます。自分のPCに無いものはwgetで自動的にネットワークより取得してきます。

    nmake -f Makefile.nmake verify_tools
    nmake -f Makefile.nmake setup

    Step5.

    まずはソースからビルドできるかどうか試してみましょう。

    nmake -f Makefile.nmake all

    ビルドが成功するとGTK2なら

    ~/wireshark-1.0.5\wireshark-gtk2\wireshark.exe

    が出来上がります。

    ビルド中にエラーポップアップが一杯でる場合はVC++2005EEのnmake.exeをPlatformSDK配下にコピーする必要が あります

    C:\Program Files\Microsoft Visual Studio 8\VC\bin\nmake.exeを C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin 以下にコピーしてみてください。


    Step6.

    ソースからビルドしたWiresharkが動く事を確認したら、実際に独自プロトコルのデコーダ(dissector)を作成します。
    ここではASN1から自動生成する方法を取り上げます。

    ~/wireshark-1.0.5/asn1

    配下に自分のプロトコル用のディレクトリを作成し以下のファイルを独自デコーダの作成に参考となりそうな、 似たような構造のプロトコルからコピーします。

    xxx.asn
    xxx.cnf
    Makefile.am Makefile.common
    Makefile.in
    Makefile.nmake
    packet-xxx-template.c
    packet-xxx-template.h

    それぞれのファイルを必要に応じて修正後

    nmake -f Makefile.nmake generate_dissector

    を実行するとpacket-xxx.c/packet-xxx.hが自動生成されます。
    ASN1の内容やtemplateファイルの内容にもよりますが、packet-xxx.c/packet-xxx.hをさらに編集する必要がある 場合もあります。

    Step7.

    Step6で自動生成されたpacket-xxx.c/packet-xxx.hを必要に応じて修正し、
    ~/wireshark-1.0.5/epan/dissectorsに置きます。

    Step8.

    ~/wireshark-1.0.5/epan/dissectors/Makefile.in に独自プロトコルの*.cファイルと*.hファイルを追加

     am__objects_1 = packet-xxx.lo
     ASN_DISSECTOR_SRC = packet-xxx.c
     DISSECTOR_INCLUDES = packet-xxx.h

       distclean-compile:のしたに
      @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packet-xxx.Plo@am__quote@

       ~/wireshark-1.0.5/epan/dissectors/Makefile.common に独自プロトコルの*.cファイルと*.hファイルを追加
    ASN_DISSECTOR_SRC
    DISSECTOR_INCLUDES

    Step9.


    ~/wireshark-1.0.5/にてmakeしてバイナリを生成

    nmake -f Makefile.nmake all

    ビルドが成功するとStep5と同じディレクトリに独自デコーダを含むWiresharkが出来上がります。


    参考

    http://www.codeproject.com/KB/IP/custom_dissector.aspx (英文サイト)

    Page Top Go to Home