TSharkによるネットワークトラフィック解析の基礎

GUIベースのWiresharkが提供する機能をコマンドラインインターフェースで実現するツールがTSharkです。対話型のグラフィカル環境以外のすべての機能を網羅しており、ターミナル上で強力なパケット分析が可能です。

Ubuntuなどのディストリビューションでは以下のコマンドでインストールできます:

sudo apt-get install tshark

インストール後、ターミナルで単純にtsharkと入力すると、デフォルトのネットワークインタフェースからリアルタイムでパケットキャプチャが始まります。各パケット情報が逐次表示され、終了はCtrl+Cで行います。

ネットワーク通信の記録と保存

特定のパケット数をファイルに保存するには以下のように実行します:

tshark -w ~/Documents/capture.pcap -c 10

この例では、最初の10個のパケットをcapture.pcapというファイルに書き出します。使用されるネットワークインタフェースはシステムのデフォルト設定に従いますが、tshark -Dで確認可能です。

保存データからの情報抽出

既存のキャプチャファイルから必要な情報を取得する場合の例です:

tshark -r session.dump -T fields -e frame.number -e frame.time_relative -e ip.src -e ip.dst -e frame.protocols -e frame.len -E header=y -E quote=n -E occurrence=f

上記コマンドでは、ヘッダー行を含めながら各フィールドを出力します。引用符なしで、複数値を持つフィールドについては最初の値のみを使用します。

出力例:

frame.number    frame.time_relative    ip.src           frame.protocols	                frame.len
1	            0.000000000	           192.168.0.106	eth:ethertype:ip:tcp	        74
2	            4.600294664	           192.168.0.1	    eth:ethertype:ip:udp:data	    147
3	            4.600846088	           192.168.0.1	    eth:ethertype:ip:udp:ssdp	    303
4	            4.601003537	           192.168.0.1	    eth:ethertype:ip:udp:ssdp	    312
5	            4.601231011	           192.168.0.1	    eth:ethertype:ip:udp:ssdp	    375
6	            4.601380060	           192.168.0.1	    eth:ethertype:ip:udp:ssdp	    312
7	            4.601607844	           192.168.0.1	    eth:ethertype:ip:udp:ssdp	    351
8	            4.601773182	           192.168.0.1	    eth:ethertype:ip:udp:ssdp	    312
9	            4.601954529	           192.168.0.1	    eth:ethertype:ip:udp:ssdp	    371
10	            4.602168547	           192.168.0.1	    eth:ethertype:ip:udp:ssdp	    367

IPアドレスの検証スクリプト

抽出した送信元IPアドレスの妥当性を確認するPythonスクリプトを作成します。ファイル名をvalidateAddr.pyとします:

import socket
import sys
import re

def validate_address(addr):
    try:
        socket.inet_aton(addr)
        return True
    except socket.error:
        return False

count_total = 0
count_valid = 0
count_invalid = 0

for record in sys.stdin:
    count_total += 1
    record = record.strip()
    if validate_address(record):
        count_valid += 1
    else:
        count_invalid += 1

print("総チェック件数:", count_total)
print("正常IP数:", count_valid)
print("異常IP数:", count_invalid)

実行方法:

tshark -r ~/trafficLog.pcap -T fields -e ip.src | python validateAddr.py

実行結果例:

総チェック件数: 10
正常IP数: 8
異常IP数: 2

タグ: tshark network-analysis packet-capture wireshark-cli linux-networking

8月30日 06:32 投稿