Wireshark達人への道 第十二歩 キャプチャファイルからポート番号ごとにパケット数をカウントしたい

本連載は、筆者がWiresharkの達人となるまでを追うドキュメンタリー作品である。

今回の記事では、Windows上で取得したキャプチャファイルを入力として、宛先ポート番号ごとにどれくらいのパケットが入力ファイルに存在しているかを知りたいとふと思ったので調べてみました。この知識の使いどころとしては、ある特定期間における宛先ポートごとの統計情報を作成するといったケースで活躍してくれるのではないだろうか。例えば、13:00~13:30がトラフィック利用のピークである環境における、統計情報の作成といった具合である。

stack overflowに同じようなことを考えた人がいました。

wireshark count packets by port

引用: https://stackoverflow.com/questions/13592513/wireshark-count-packets-by-port

以下が回答者のluaスクリプト(ports.lua)です。

local tap 

local ports = {} 

local function packet(pinfo, tvb, userdata)
    -- store number of packets per each port
    local port = pinfo.dst_port
    ports[port] = (ports[port] or 0) + 1
end

local function draw(userdata)

    local maxi,maxv = 0,0
    -- print all gathered statictics and find max
    for i,v in pairs(ports) do
        print(i .. ":",  v)
        if maxv < v then
            maxi,maxv = i,v
        end
    end
    print ("Max:", maxi, maxv)
end

local function reset(userdata)
    ports = {}
end

local function show_ports()
    tap = Listener.new()
    tap.packet = packet
    tap.draw = draw 
    tap.reset = reset 
end

register_stat_cmd_arg('ports', show_ports)

使い方は、以下の通りです。

C:\Program Files\Wireshark>tshark.exe -X lua_script:ports.lua -z ports -r paessler.pcap

オプションの-zがポイントで、「ports」という統計情報は存在しません。-Xの引数にあるports.luaにあるregister_stat_cmd_arg(‘ports’, show_ports)で定義しているものと考えます。今回tshark.exeの引数で指定した入力ファイルpaessler.pcapはNetFlow v5のパケット1種類しかありません。以下に実行結果を示します。

図1 tshark.exeの実行結果

他の宛先ポートを利用する通信が存在すれば、6363: 347の行が一行ではなく複数行となります。また、Max: 6363 347の行には最もパケット数が多かった通信が表示されます。これは、宛先ポート6363のパケットが347個あったという意味となります。

(Visited 909 times, 1 visits today)
The following two tabs change content below.
【好きなもの】 インフラ技術が好き。古いものが好き。 【生きてきたフィールド】 システム運用、ソフトウェア開発、ミドルウェア検証、OSSサポート、プリセールスエンジニア、プロジェクトマネジメント 【このサイトでの役割】 サイト管理者。