Wireshark IPフィルタ入門:ネットワーク解析を始めよう
イントロダクション
現代のネットワーク環境は、かつてないほど複雑化しています。アプリケーションのパフォーマンス問題のトラブルシューティング、セキュリティ侵害の調査、あるいは単にネットワークの動作を理解するために、ネットワークトラフィックを解析する能力は不可欠です。Wiresharkは、世界で最も人気のある、そして強力なネットワークプロトコルアナライザの一つであり、ネットワークトラフィックのキャプチャと分析を可能にする強力なツールを提供します。
しかし、Wiresharkは強力なツールである反面、キャプチャされるデータ量が膨大になる可能性があります。特に大規模なネットワークでは、数秒で数百メガバイト、あるいは数ギガバイトのデータをキャプチャしてしまうことも珍しくありません。この膨大なデータの中から必要な情報を探し出すのは、至難の業です。
そこで登場するのが「フィルタ」です。Wiresharkのフィルタ機能を使うことで、特定の条件に合致するトラフィックのみを表示したり、キャプチャしたりすることができます。これにより、解析対象を絞り込み、効率的に問題解決を進めることができます。特にIPフィルタは、ネットワーク解析の基礎であり、Wiresharkを使いこなすための第一歩と言えるでしょう。
本記事では、WiresharkのIPフィルタの基礎から応用までを詳細に解説します。IPフィルタの構文、基本的なフィルタ演算子、よく使うフィルタの例、さらには応用的なフィルタテクニックまで、具体的な例を交えながら分かりやすく説明します。この記事を読むことで、あなたはWiresharkのIPフィルタを自在に操り、ネットワーク解析のスキルを飛躍的に向上させることができるでしょう。
目次
- Wiresharkとは?
- ネットワークプロトコルアナライザの概要
- Wiresharkの主要な機能
- Wiresharkのインストールと設定
- IPアドレスの基本
- IPアドレスの構造 (IPv4, IPv6)
- IPアドレスの種類 (グローバルIPアドレス、プライベートIPアドレス)
- サブネットマスクとネットワークアドレス
- Wiresharkのフィルタの概要
- キャプチャフィルタと表示フィルタの違い
- フィルタの構文と基本演算子
- フィルタの適用方法
- IPフィルタの基礎
ip.addr
フィルタ:IPアドレスによるフィルタip.src
フィルタ:送信元IPアドレスによるフィルタip.dst
フィルタ:宛先IPアドレスによるフィルタ- IPアドレスの範囲指定
- 否定形のフィルタ
- IPフィルタの応用
- 論理演算子 (
and
,or
,not
) を用いた複合フィルタ ip.len
フィルタ:IPパケット長によるフィルタip.ttl
フィルタ:Time To Live (TTL) によるフィルタip.proto
フィルタ:プロトコルによるフィルタip.flags
フィルタ:IPフラグによるフィルタ- フィルタと他のプロトコルフィルタの組み合わせ (TCP, UDP, ICMPなど)
- 論理演算子 (
- 具体的なフィルタ例とトラブルシューティング
- 特定のホストとの通信のみを表示する
- 特定のサブネットからの通信のみを表示する
- 特定のポートへの通信のみを表示する (TCP/UDPフィルタと組み合わせる)
- ICMPパケットのみを表示する
- フラグメント化されたIPパケットを表示する
- フィルタが機能しない場合の確認ポイント
- キャプチャフィルタの活用
- キャプチャフィルタの構文
- キャプチャフィルタと表示フィルタの使い分け
- tcpdumpとの連携
- Wiresharkのその他の便利な機能
- カラーリングルール
- 追跡ストリーム
- エキスパートインフォ
- まとめと今後の学習
- Wireshark IPフィルタの重要性と活用
- さらなる学習のためのリソース
- ネットワーク解析のスキルアップ
1. Wiresharkとは?
1.1 ネットワークプロトコルアナライザの概要
ネットワークプロトコルアナライザ(またはパケットアナライザ、ネットワークスニファ)は、ネットワーク上を流れるデータをキャプチャし、解析するためのツールです。これらのツールは、ネットワークの問題を特定し、アプリケーションのパフォーマンスを監視し、セキュリティ侵害を調査するために使用されます。ネットワークプロトコルアナライザは、ネットワーク管理、セキュリティ、およびソフトウェア開発において不可欠なツールです。
プロトコルアナライザは、ネットワークインターフェースを「プロミスキャスモード」に設定することで、ネットワーク上を流れるすべてのトラフィックをキャプチャします(インターフェースが対応している場合)。キャプチャされたデータは、その後、プロトコルごとに構造化され、分析しやすい形式で表示されます。
1.2 Wiresharkの主要な機能
Wiresharkは、オープンソースでクロスプラットフォームのネットワークプロトコルアナライザであり、以下の主要な機能を備えています。
- パケットキャプチャ: ネットワークインターフェースからリアルタイムでパケットをキャプチャします。
- 詳細なプロトコル解析: TCP、UDP、HTTP、DNSなど、数百ものプロトコルを解析し、各プロトコルの詳細な情報を表示します。
- 強力なフィルタリング: キャプチャされたデータの中から、特定の条件に合致するパケットのみを表示するフィルタリング機能を提供します。
- GUIインターフェース: グラフィカルなインターフェースで、データの可視化と分析を容易にします。
- パケットのエクスポート: キャプチャされたデータを、さまざまな形式(pcap、pcapngなど)でエクスポートできます。
- 統計情報の表示: ネットワークトラフィックの統計情報を表示し、ネットワークの全体的な状態を把握するのに役立ちます。
- VOIP解析: VoIP(Voice over IP)トラフィックを解析し、通話品質の問題を特定するのに役立ちます。
- クロスプラットフォーム対応: Windows、macOS、Linuxなど、さまざまなオペレーティングシステムで動作します。
1.3 Wiresharkのインストールと設定
Wiresharkは、Wiresharkの公式サイト (https://www.wireshark.org/) から無料でダウンロードできます。
インストール手順:
- Wiresharkの公式サイトから、使用しているオペレーティングシステムに対応するインストーラをダウンロードします。
- インストーラを実行し、画面の指示に従ってインストールを進めます。
- インストール中に、WinPcap(Windowsの場合)またはlibpcap(Linux/macOSの場合)のインストールを求められる場合があります。これは、ネットワークインターフェースからパケットをキャプチャするために必要なライブラリです。指示に従ってインストールしてください。
- インストールが完了したら、Wiresharkを起動します。
設定:
Wiresharkの基本的な設定は、通常、インストール時に自動的に行われますが、必要に応じて以下の設定を変更できます。
- インターフェースの選択: Wiresharkを起動すると、利用可能なネットワークインターフェースの一覧が表示されます。キャプチャしたいインターフェースを選択します。
- キャプチャオプション: キャプチャオプションを設定することで、キャプチャするトラフィックの種類を制限したり、キャプチャファイルのサイズを制限したりすることができます。
- 表示オプション: Wiresharkの表示オプションを設定することで、パケットの表示形式やカラーリングルールなどをカスタマイズできます。
2. IPアドレスの基本
2.1 IPアドレスの構造 (IPv4, IPv6)
IPアドレスは、ネットワーク上のデバイスを識別するための数値ラベルです。現在、主にIPv4とIPv6の2つのバージョンのIPアドレスが使用されています。
-
IPv4 (Internet Protocol version 4): 32ビットのアドレスであり、通常、192.168.1.1のように、ドットで区切られた4つの10進数で表現されます。各10進数は0から255までの範囲の値を取ります。IPv4アドレスの数は限られているため、アドレス枯渇の問題が深刻化しています。
-
IPv6 (Internet Protocol version 6): 128ビットのアドレスであり、通常、2001:0db8:85a3:0000:0000:8a2e:0370:7334のように、コロンで区切られた8つの16進数で表現されます。各16進数は4桁の16進数で構成されます。IPv6は、IPv4のアドレス枯渇問題を解決するために開発されました。
2.2 IPアドレスの種類 (グローバルIPアドレス、プライベートIPアドレス)
IPアドレスには、グローバルIPアドレスとプライベートIPアドレスの2つの主要な種類があります。
-
グローバルIPアドレス: インターネット上で一意に識別されるアドレスであり、インターネットサービスプロバイダ(ISP)から割り当てられます。グローバルIPアドレスを持つデバイスは、インターネット上の他のデバイスと直接通信できます。
-
プライベートIPアドレス: ローカルネットワーク(家庭内ネットワークや企業内ネットワークなど)内で使用されるアドレスであり、インターネット上では一意ではありません。プライベートIPアドレスを持つデバイスは、ルータやファイアウォールなどのネットワークアドレス変換(NAT)デバイスを介してインターネットにアクセスします。
プライベートIPアドレスの範囲は、RFC 1918で定義されています。
- 10.0.0.0 – 10.255.255.255
- 172.16.0.0 – 172.31.255.255
- 192.168.0.0 – 192.168.255.255
2.3 サブネットマスクとネットワークアドレス
サブネットマスクは、IPアドレスをネットワークアドレスとホストアドレスに分割するために使用されます。ネットワークアドレスは、ネットワーク自体を識別し、ホストアドレスは、ネットワーク内の特定のデバイスを識別します。
サブネットマスクは、IPv4アドレスと同様に、ドットで区切られた4つの10進数で表現されます。サブネットマスクのビットが1である部分はネットワークアドレスを表し、0である部分はホストアドレスを表します。
例えば、IPアドレスが192.168.1.10で、サブネットマスクが255.255.255.0の場合、ネットワークアドレスは192.168.1.0であり、ホストアドレスは10です。
CIDR(Classless Inter-Domain Routing)表記は、サブネットマスクを簡潔に表現するために使用されます。CIDR表記では、IPアドレスの後にスラッシュ(/)とネットワークアドレスのビット数が続きます。例えば、192.168.1.10/24は、IPアドレスが192.168.1.10で、サブネットマスクが255.255.255.0であることを意味します。
3. Wiresharkのフィルタの概要
3.1 キャプチャフィルタと表示フィルタの違い
Wiresharkには、キャプチャフィルタと表示フィルタという2種類のフィルタがあります。
-
キャプチャフィルタ: パケットをキャプチャする際に適用されるフィルタです。キャプチャフィルタは、キャプチャするパケットの種類を制限し、不要なトラフィックをキャプチャしないようにするために使用されます。キャプチャフィルタは、libpcapライブラリによって処理され、システムのリソースへの負荷を軽減するのに役立ちます。
-
表示フィルタ: キャプチャされたパケットを表示する際に適用されるフィルタです。表示フィルタは、キャプチャされたデータの中から、特定の条件に合致するパケットのみを表示するために使用されます。表示フィルタは、Wireshark自身によって処理され、キャプチャされたすべてのデータを対象とするため、キャプチャフィルタよりも柔軟性があります。
キャプチャフィルタと表示フィルタの主な違い:
特徴 | キャプチャフィルタ | 表示フィルタ |
---|---|---|
適用タイミング | パケットキャプチャ時 | パケット表示時 |
処理 | libpcapライブラリ | Wireshark自身 |
目的 | 不要なトラフィックのキャプチャを抑制、リソース節約 | 必要なパケットのみを表示し、解析を効率化 |
柔軟性 | 低い | 高い |
構文 | 異なる (libpcap構文) | 異なる (Wireshark表示フィルタ構文) |
3.2 フィルタの構文と基本演算子
Wiresharkのフィルタは、特定の構文に従って記述する必要があります。
表示フィルタの構文:
<フィールド名> <演算子> <値>
- フィールド名: パケット内の特定のフィールド(例:ip.addr、tcp.port、http.request.method)。
- 演算子: フィールドの値と比較するための演算子(例:==、!=、>、<、contains)。
- 値: フィールドと比較するための値(例:192.168.1.1、80、GET)。
基本的なフィルタ演算子:
演算子 | 説明 |
---|---|
== |
等しい。フィールドの値が指定された値と等しい場合に真となります。 |
!= |
等しくない。フィールドの値が指定された値と等しくない場合に真となります。 |
> |
より大きい。フィールドの値が指定された値より大きい場合に真となります(数値フィールドのみ)。 |
< |
より小さい。フィールドの値が指定された値より小さい場合に真となります(数値フィールドのみ)。 |
>= |
以上。フィールドの値が指定された値以上の場合に真となります(数値フィールドのみ)。 |
<= |
以下。フィールドの値が指定された値以下の場合に真となります(数値フィールドのみ)。 |
contains |
部分文字列を含む。フィールドの値が指定された文字列を含む場合に真となります(文字列フィールドのみ)。 |
matches |
正規表現に一致する。フィールドの値が指定された正規表現に一致する場合に真となります(文字列フィールドのみ)。 |
&& (または and ) |
論理積。複数のフィルタ条件がすべて真の場合に真となります。 |
|| (または or ) |
論理和。複数のフィルタ条件の少なくとも1つが真の場合に真となります。 |
! (または not ) |
否定。フィルタ条件が偽の場合に真となります。 |
3.3 フィルタの適用方法
Wiresharkでフィルタを適用するには、次の手順を実行します。
- Wiresharkを起動し、パケットキャプチャを開始するか、既存のキャプチャファイルを開きます。
- Wiresharkのメインウィンドウの上部にある「フィルタ」入力フィールドに、フィルタ式を入力します。
- Enterキーを押すか、「適用」ボタンをクリックします。
Wiresharkは、入力されたフィルタ式に基づいて、表示されているパケットをフィルタリングします。フィルタに合致するパケットのみが表示され、合致しないパケットは非表示になります。
4. IPフィルタの基礎
4.1 ip.addr
フィルタ:IPアドレスによるフィルタ
ip.addr
フィルタは、送信元または宛先IPアドレスが指定されたIPアドレスと一致するパケットを表示するために使用されます。
構文:
ip.addr == <IPアドレス>
例:
ip.addr == 192.168.1.10 // 送信元または宛先IPアドレスが192.168.1.10であるパケットを表示
4.2 ip.src
フィルタ:送信元IPアドレスによるフィルタ
ip.src
フィルタは、送信元IPアドレスが指定されたIPアドレスと一致するパケットを表示するために使用されます。
構文:
ip.src == <IPアドレス>
例:
ip.src == 10.0.0.5 // 送信元IPアドレスが10.0.0.5であるパケットを表示
4.3 ip.dst
フィルタ:宛先IPアドレスによるフィルタ
ip.dst
フィルタは、宛先IPアドレスが指定されたIPアドレスと一致するパケットを表示するために使用されます。
構文:
ip.dst == <IPアドレス>
例:
ip.dst == 8.8.8.8 // 宛先IPアドレスが8.8.8.8であるパケットを表示 (Google DNS)
4.4 IPアドレスの範囲指定
IPアドレスの範囲を指定するには、ip.addr
、ip.src
、ip.dst
フィルタとCIDR表記を組み合わせて使用します。
構文:
ip.addr == <IPアドレス>/<プレフィックス長>
ip.src == <IPアドレス>/<プレフィックス長>
ip.dst == <IPアドレス>/<プレフィックス長>
例:
ip.addr == 192.168.1.0/24 // 192.168.1.0/24ネットワーク内のすべてのIPアドレスとの通信を表示
ip.src == 10.0.0.0/16 // 10.0.0.0/16ネットワークからのすべての通信を表示
ip.dst == 172.16.0.0/12 // 172.16.0.0/12ネットワークへのすべての通信を表示
4.5 否定形のフィルタ
否定形のフィルタを使用すると、指定された条件に合致しないパケットを表示できます。否定形のフィルタは、!
演算子またはnot
キーワードを使用します。
構文:
!ip.addr == <IPアドレス>
not ip.addr == <IPアドレス>
例:
!ip.addr == 192.168.1.1 // IPアドレスが192.168.1.1ではないすべてのパケットを表示
not ip.src == 10.0.0.10 // 送信元IPアドレスが10.0.0.10ではないすべてのパケットを表示
5. IPフィルタの応用
5.1 論理演算子 (and
, or
, not
) を用いた複合フィルタ
論理演算子を使用すると、複数のフィルタ条件を組み合わせて、より複雑なフィルタを作成できます。
and
(または&&
): 両方の条件が真である必要があります。or
(または||
): 少なくとも1つの条件が真である必要があります。not
(または!
): 条件を反転します。
例:
ip.src == 192.168.1.10 and ip.dst == 8.8.8.8 // 送信元IPアドレスが192.168.1.10で、宛先IPアドレスが8.8.8.8であるパケットを表示
ip.addr == 10.0.0.1 or ip.addr == 10.0.0.2 // IPアドレスが10.0.0.1または10.0.0.2であるパケットを表示
not ip.addr == 172.16.0.1 // IPアドレスが172.16.0.1ではないすべてのパケットを表示
5.2 ip.len
フィルタ:IPパケット長によるフィルタ
ip.len
フィルタは、IPパケットの全長(ヘッダとデータを含む)に基づいてフィルタリングするために使用されます。
構文:
ip.len <演算子> <長さ>
例:
ip.len > 1500 // IPパケット長が1500バイトを超えるパケットを表示(一般的にMTUサイズを超えるパケット)
ip.len <= 64 // IPパケット長が64バイト以下のパケットを表示(最小IPパケット長)
5.3 ip.ttl
フィルタ:Time To Live (TTL) によるフィルタ
ip.ttl
フィルタは、IPパケットのTTL(Time To Live)値に基づいてフィルタリングするために使用されます。TTLは、パケットがネットワーク上で生存できる最大ホップ数を表します。パケットがルータを通過するたびにTTLが1ずつ減少し、TTLが0になるとパケットは破棄されます。
構文:
ip.ttl <演算子> <TTL値>
例:
ip.ttl == 1 // TTLが1であるパケットを表示(通常、直接接続されたホストからのパケット)
ip.ttl < 10 // TTLが10未満であるパケットを表示(ルーティングの問題を調査する際に役立つ)
5.4 ip.proto
フィルタ:プロトコルによるフィルタ
ip.proto
フィルタは、IPパケットで使用されているプロトコルに基づいてフィルタリングするために使用されます。
構文:
ip.proto == <プロトコル番号またはプロトコル名>
一般的なプロトコル番号と名前:
1
またはicmp
: ICMP (Internet Control Message Protocol)6
またはtcp
: TCP (Transmission Control Protocol)17
またはudp
: UDP (User Datagram Protocol)
例:
ip.proto == 6 // TCPパケットを表示
ip.proto == tcp // TCPパケットを表示 (上記と同じ)
ip.proto == 17 // UDPパケットを表示
ip.proto == udp // UDPパケットを表示 (上記と同じ)
ip.proto == icmp // ICMPパケットを表示
5.5 ip.flags
フィルタ:IPフラグによるフィルタ
ip.flags
フィルタは、IPパケットのフラグに基づいてフィルタリングするために使用されます。IPフラグは、パケットのフラグメント化に関する情報を伝えます。
一般的なIPフラグ:
DF
(Don’t Fragment): パケットがフラグメント化されないことを示します。MF
(More Fragments): パケットがフラグメントであり、後続のフラグメントが存在することを示します。Reserved bit
: 将来のために予約されているビット
構文:
ip.flags.<フラグ名> == 1
例:
ip.flags.df == 1 // Don't Fragment (DF) フラグが設定されているパケットを表示 (フラグメント化されないパケット)
ip.flags.mf == 1 // More Fragments (MF) フラグが設定されているパケットを表示 (フラグメント化されたパケット)
5.6 フィルタと他のプロトコルフィルタの組み合わせ (TCP, UDP, ICMPなど)
IPフィルタは、TCP、UDP、ICMPなどの他のプロトコルフィルタと組み合わせて使用することで、より詳細なフィルタリングを行うことができます。
例:
-
TCPフィルタとの組み合わせ:
ip.src == 192.168.1.10 and tcp.port == 80 // 送信元IPアドレスが192.168.1.10で、TCPポートが80であるパケットを表示 (HTTPトラフィック)
ip.dst == 10.0.0.5 and tcp.flags.syn == 1 // 宛先IPアドレスが10.0.0.5で、SYNフラグが設定されているTCPパケットを表示 (TCP接続の開始) -
UDPフィルタとの組み合わせ:
ip.dst == 8.8.8.8 and udp.port == 53 // 宛先IPアドレスが8.8.8.8で、UDPポートが53であるパケットを表示 (DNSクエリ)
-
ICMPフィルタとの組み合わせ:
ip.src == 192.168.1.1 and icmp // 送信元IPアドレスが192.168.1.1からのICMPパケットを表示 (Pingリクエストなど)
icmp.type == 0 // ICMP Echo Replyパケットを表示
icmp.type == 8 // ICMP Echo Requestパケットを表示
6. 具体的なフィルタ例とトラブルシューティング
6.1 特定のホストとの通信のみを表示する
ip.addr == <ホストのIPアドレス>
例:
ip.addr == 192.168.1.100 // IPアドレスが192.168.1.100であるホストとのすべての通信を表示
6.2 特定のサブネットからの通信のみを表示する
ip.addr == <サブネットアドレス>/<プレフィックス長>
例:
ip.addr == 192.168.1.0/24 // 192.168.1.0/24サブネットからのすべての通信を表示
6.3 特定のポートへの通信のみを表示する (TCP/UDPフィルタと組み合わせる)
tcp.port == <ポート番号>
udp.port == <ポート番号>
例:
tcp.port == 80 // TCPポート80へのすべての通信を表示 (HTTP)
udp.port == 53 // UDPポート53へのすべての通信を表示 (DNS)
tcp.dstport == 443 and ip.src == 192.168.1.100 // 宛先TCPポートが443で、送信元IPアドレスが192.168.1.100であるパケットを表示 (特定のホストからのHTTPSトラフィック)
6.4 ICMPパケットのみを表示する
icmp
または
ip.proto == icmp
例:
icmp.type == 8 // ICMP Echo Request (Pingリクエスト) パケットを表示
icmp.type == 0 // ICMP Echo Reply (Pingリプライ) パケットを表示
6.5 フラグメント化されたIPパケットを表示する
ip.flags.mf == 1
または
ip.flags.df == 0
例:
ip.len > 1480 and ip.flags.mf == 1 // イーサネットネットワークでフラグメント化された可能性があるパケットを表示 (MTUが1500バイトの場合)
6.6 フィルタが機能しない場合の確認ポイント
- 構文エラー: フィルタの構文に誤りがないか確認してください。Wiresharkは構文エラーがある場合、フィルタを適用しません。フィルタ入力フィールドの背景色が赤色になっている場合は、構文エラーがあることを示します。
- 大文字と小文字の区別: Wiresharkのフィルタは、フィールド名に対して大文字と小文字を区別します。例えば、
ip.addr
はIP.ADDR
とは異なります。 - フィルタの優先順位: 複数のフィルタ条件を組み合わせる場合は、括弧を使用して優先順位を明示的に指定してください。
- キャプチャフィルタと表示フィルタの混同: キャプチャフィルタと表示フィルタは異なる構文を使用します。キャプチャフィルタを誤って表示フィルタとして使用している可能性があります。
- 対象となるパケットの存在: 指定したフィルタに合致するパケットが実際にキャプチャされているか確認してください。
- 古いフィルタの適用: 以前に適用したフィルタが残っている可能性があります。フィルタ入力フィールドをクリアして、新しいフィルタを適用してください。
- ネットワークインターフェースの選択: 適切なネットワークインターフェースを選択しているか確認してください。間違ったインターフェースを選択していると、目的のトラフィックをキャプチャできません。
- 権限の問題: パケットキャプチャには、管理者権限が必要な場合があります。Wiresharkを管理者権限で実行してみてください。
- フィルタの複雑さ: 複雑すぎるフィルタは、Wiresharkのパフォーマンスに影響を与える可能性があります。フィルタをより単純な条件に分割してみてください。
7. キャプチャフィルタの活用
7.1 キャプチャフィルタの構文
キャプチャフィルタは、表示フィルタとは異なる構文を使用します。キャプチャフィルタの構文は、libpcapライブラリによって定義されています。
基本的なキャプチャフィルタの構文:
<タイプ> <方向> <プロトコル> <ホスト> <ポート> <論理演算子>
- タイプ:
host
: 特定のホストとの通信net
: 特定のネットワークとの通信port
: 特定のポートとの通信
- 方向:
src
: 送信元dst
: 宛先src and dst
: 送信元と宛先src or dst
: 送信元または宛先
- プロトコル:
ether
: イーサネットip
: IPtcp
: TCPudp
: UDPicmp
: ICMP
- ホスト: IPアドレスまたはホスト名
- ポート: ポート番号
- 論理演算子:
and
(または&&
): 論理積or
(または||
): 論理和not
(または!
): 否定
キャプチャフィルタの例:
host 192.168.1.10
: IPアドレスが192.168.1.10であるホストとのすべての通信をキャプチャnet 192.168.1.0/24
: 192.168.1.0/24ネットワークとのすべての通信をキャプチャport 80
: ポート80とのすべての通信をキャプチャtcp port 80
: TCPポート80とのすべての通信をキャプチャudp port 53
: UDPポート53とのすべての通信をキャプチャsrc host 10.0.0.1
: 送信元IPアドレスが10.0.0.1であるすべての通信をキャプチャdst port 443
: 宛先ポートが443であるすべての通信をキャプチャhost 192.168.1.10 and port 80
: IPアドレスが192.168.1.10であるホストとのポート80でのすべての通信をキャプチャnot host 172.16.0.1
: IPアドレスが172.16.0.1ではないすべての通信をキャプチャ
7.2 キャプチャフィルタと表示フィルタの使い分け
キャプチャフィルタと表示フィルタは、それぞれ異なる目的に使用されます。
- キャプチャフィルタ: 不要なトラフィックをキャプチャしないようにし、キャプチャファイルのサイズを小さく保つために使用されます。リソースが限られている環境(例えば、組み込みデバイスや高負荷のネットワーク)では、キャプチャフィルタの使用が特に重要です。
- 表示フィルタ: キャプチャされたデータの中から、特定の条件に合致するパケットのみを表示するために使用されます。表示フィルタは、キャプチャされたすべてのデータを対象とするため、キャプチャフィルタよりも柔軟性があります。
一般的な使い分けのシナリオ:
- 特定のアプリケーションのトラブルシューティング: キャプチャフィルタを使用して、関連するポート(例えば、HTTPの80番ポート、HTTPSの443番ポート)のトラフィックのみをキャプチャし、表示フィルタを使用して、特定のエラーコードやリクエストメソッドなどの詳細な条件に基づいてパケットをフィルタリングします。
- セキュリティ侵害の調査: キャプチャフィルタを使用して、疑わしいIPアドレスやポートからのトラフィックのみをキャプチャし、表示フィルタを使用して、特定のペイロードパターンやプロトコル異常などの悪意のあるアクティビティの兆候を検索します。
- ネットワークのパフォーマンス分析: キャプチャフィルタを使用して、特定の期間にわたるすべてのトラフィックをキャプチャし、表示フィルタを使用して、特定のプロトコルの使用状況、レイテンシ、およびパケットロスなどのパフォーマンス指標を分析します。
7.3 tcpdumpとの連携
tcpdumpは、コマンドラインベースのパケットアナライザであり、Wiresharkと同じlibpcapライブラリを使用しています。tcpdumpを使用してパケットをキャプチャし、そのキャプチャファイルをWiresharkで開いて分析することができます。
tcpdumpの基本的な使用方法:
tcpdump -i <インターフェース> -w <ファイル名>.pcap <フィルタ>
-i <インターフェース>
: キャプチャするネットワークインターフェースを指定します(例:eth0
、wlan0
)。-w <ファイル名>.pcap
: キャプチャされたパケットをpcap形式のファイルに保存します。<フィルタ>
: キャプチャフィルタを指定します(libpcap構文を使用)。
例:
tcpdump -i eth0 -w capture.pcap host 192.168.1.10 and port 80
このコマンドは、eth0
インターフェースから、IPアドレスが192.168.1.10であるホストとのポート80でのすべての通信をキャプチャし、capture.pcap
というファイルに保存します。
Wiresharkでのtcpdumpキャプチャファイルのオープン:
Wiresharkで、ファイル
-> 開く
を選択し、capture.pcap
ファイルを選択して開きます。Wiresharkでキャプチャファイルを分析できます。
8. Wiresharkのその他の便利な機能
8.1 カラーリングルール
Wiresharkのカラーリングルールを使用すると、特定の条件に合致するパケットを異なる色で表示することができます。これにより、重要なパケットを視覚的に識別しやすくなります。
カラーリングルールは、表示
-> カラーリングルール
メニューから設定できます。
例:
- TCP SYNパケットを赤色で表示する。
- HTTP 500エラーをオレンジ色で表示する。
- 特定のIPアドレスからのトラフィックを緑色で表示する。
8.2 追跡ストリーム
Wiresharkの追跡ストリーム機能を使用すると、TCPまたはUDPストリームのパケットをまとめて表示することができます。これにより、通信の流れを把握しやすくなります。
パケットを右クリックし、追跡
-> TCPストリーム
またはUDPストリーム
を選択することで、追跡ストリームを開始できます。
8.3 エキスパートインフォ
Wiresharkのエキスパートインフォは、パケットの解析