Wireshark達人への道 第十五歩 完結!?Dissector作成の勉強
本連載は、筆者がWiresharkの達人となるまでを追うドキュメンタリー作品である。
Wireshark達人への道 第十四歩で、独自パケットの作成方法をご紹介しました。
第十五歩目は様々な人が紹介しているWiresharkのDissector作成方法を勉強したいと思います。
独自パケットの作成方法からDissector作成までを紹介しているサイトはありませんので、私が勉強していくと同時に読者の皆様も一緒に確認していただけると幸いです。
尚、完結とありますがDissectorの作成が完結という意味で、本企画の完結という意味ではございません。
復習として、前回作成した独自プロトコルの仕様を記述しておきます。
独自プロトコルのサイズを8バイトとし、中身は以下の記載です。前半4バイトをlength。後半4バイトは文字列です。
#独自プロトコル仕様 UDP
#8バイトで文字列はabcdの例
#0X00000008 0X61626364
今回Dissector作成の勉強で参考にしたサイトは、Cyberdefenceのサイトです。筆者の環境では、Wireshark Dissectorと検索するとトップ2に表示されました。
参考サイト
WiresharkのDissectorを使った独自プロトコル解析をやさしく解説してみました
記事タイトルがやさしく解説とある通り、これ以上分かりやすい説明は不可能です。
Cyberdefenceのサイトを必ず一読ください。
筆者が作成した独自プロトコルとの違いは、TCP がUDPになっているところだけです。違いが分かるようにDissectorを張っておきます。
-- mieruka_study.lua プログラム
proto = Proto("mieruka","mieruka独自プロトコル")
mieruka_size_F = ProtoField.new("独自プロトコルのサイズ","mieruka.mieruka_size",ftypes.UINT32)
mieruka_data_F = ProtoField.new("独自プロトコルの文字列","mieruka.mieruka_data",ftypes.STRING)
proto.fields = {mieruka_size_F, mieruka_data_F}
function proto.dissector(buffer, pinfo, tree)
pinfo.cols.protocol = "MIERUKA"
local subtree = tree:add(proto, buffer())
subtree:add(mieruka_size_F, buffer(0,4))
subtree:add(mieruka_data_F, buffer(4,4))
end
tcp_table = DissectorTable.get("udp.port") --- udp.portにすること
tcp_table:add(6363, proto)
作成したmieruka_study.luaを筆者の環境ですと、C:\Users\”ユーザー名”\AppData\Roaming\Wireshark\plugins にフォルダを作成して、保存しました。
保存する際は、UTF-8で保存することに注意してください。それ以外ですと文字化けします。
図1の通り、独自プロトコルを解析できました。表示フィルタも動作します。コードも短くて分かり易いですね。
今後はluaの勉強をしていきたいと思います。
最新記事 by 伊集院 (全て見る)
- 【暗号化通信(TLS)を復元できる】WIRESHARK達人への道 第二十五歩 暗号化通信(TLS)を復号する方法 - 1月 1, 2023
- 【詳細版】NSM(ネットワークセキュリティモニタ)、Zeekとは? - 9月 1, 2022
- 【簡易版】OSSネットワークセキュリティモニタZeekとは? - 8月 26, 2022