ネットワークパケットキャプチャ入門 — Wiresharkで学ぶARPとICMP
この記事の内容
- Windows 10仮想マシン2台にWiresharkをインストールし、パケットキャプチャ環境を構築します
- プライベートIPアドレスを手動設定し、2台間で通信できる状態を作ります
- ARPによるMACアドレス解決の仕組みをパケットレベルで確認します
- ICMPを使ったping通信をキャプチャし、到達確認とトラブルシューティングの基礎を学びます
- Windowsファイアウォールが原因でpingの返答がない場合の調査・対処を実演します
Wiresharkのインストール
今回はWindows 10の仮想マシンを2台用意し、それぞれにWiresharkをインストールします。
Wiresharkのインストーラーをダウンロードして実行すると、インストールウィザードが順に進みます。途中でNpcap(ネットワークパケットキャプチャライブラリ)のインストールを求められますが、これもそのままインストールしてください。Wiresharkが内部でパケットをキャプチャするために必要なコンポーネントです。
インストール完了後、デスクトップにショートカットを作成しておくと便利です。同じ手順を2台目の仮想マシンにも行います。
注意: Wiresharkはキャプチャ時に管理者権限が必要になる場合があります。うまくキャプチャできない場合は「管理者として実行」で起動してください。
ネットワーク設定(プライベートIPアドレスの手動設定)
2台の仮想マシンが互いに通信できるよう、IPv4アドレスを手動で設定します。
プライベートIPアドレスの範囲(IPv4)
| 範囲 | CIDR |
|---|---|
| 10.0.0.0 〜 10.255.255.255 | /8 |
| 172.16.0.0 〜 172.31.255.255 | /12 |
| 192.168.0.0 〜 192.168.255.255 | /16 |
テスト環境では、最も小さいレンジである 192.168.x.x 系が使われることが多いです。今回は以下のように設定します。
- 1台目:
192.168.1.1 / 255.255.255.0 - 2台目:
192.168.1.2 / 255.255.255.0
サブネットマスクはIPアドレス入力後にTabキーを押すと自動入力されます。デフォルトゲートウェイは今回のテストでは不要ですので空欄のままでかまいません。
この設定により、2台は同一ネットワーク(192.168.1.0/24)に属し、直接通信が可能な状態になります。
Wiresharkの起動とキャプチャ開始
Wiresharkを起動すると、利用可能なネットワークインターフェース一覧が表示されます。今回は実際の物理的なネットワークに対応する Ethernet アダプターを選択します。
インターフェースをダブルクリック、またはキャプチャ開始ボタンを押すと、パケットのキャプチャが始まります。通信が何も発生していなければパケットは表示されませんが、何らかの通信が起きると次々とパケットが流れてきます。
実際の業務ネットワークなどでは大量のパケットが流れるため、フィルター機能を活用して必要なパケットだけを絞り込むのがポイントです。
ICMPフィルターをかけてpingを確認する
1台目から2台目へpingを実行してみます。
ping 192.168.1.2
Wireshark側でICMPのみ表示するよう、フィルターバーに以下を入力します。
pingの返答がない場合
コマンドプロンプトでは「応答なし」が表示されますが、Wiresharkを確認すると、1台目からICMPエコーリクエストは確かに送出されています。
ここで両端(送信側・受信側)でWiresharkをキャプチャすることが重要です。
- 送信側(1台目):
192.168.1.1からリクエストを4回送出していることが確認できます - 受信側(2台目): リクエストが4回届いていますが、返答(エコーリプライ)を送信していないことがわかります
No response found! という表示がWiresharkに出ている場合、パケット自体は届いているにもかかわらず返答していないことを意味します。これは Windowsファイアウォールがping(ICMP)への応答をブロックしていることが原因です。
ARPによるMACアドレス解決を確認する
ICMPパケットが送信される前に、実はARPという通信が行われています。Wiresharkのフィルターを以下に変更して確認してみましょう。
ARP(Address Resolution Protocol) とは、IPアドレスからMACアドレスを解決するプロトコルです。
キャプチャを見ると、以下のやりとりが確認できます。
- ARPリクエスト(ブロードキャスト): 1台目(
192.168.1.1)が「192.168.1.2のMACアドレスを持っているのは誰ですか?」とネットワーク全体に問い合わせます - ARPリプライ(ユニキャスト): 2台目が「
192.168.1.2のMACアドレスは00:15:5d:49:64:01です」と返答します
このやりとりによって、送信側はICMPパケットを作るために必要な相手のMACアドレスを知ることができます。
ARPテーブルはWindowsのコマンドプロンプトで次のように確認できます。
arp -a
出力例:
ここに相手のIPとMACの対応が学習されているため、以降のパケット送信に利用されます。
ネットワーク通信の順序まとめ:
- まずARPでMACアドレスを取得する
- 取得したMACアドレスを使ってIPパケット(ICMPなど)を組み立てる
- パケットを送信する
Windowsファイアウォールを無効にしてpingを通す
2台目のファイアウォール設定を確認すると、パブリックネットワークに対してファイアウォールが有効になっており、ICMPへの応答がデフォルトでブロックされていることがわかります。
テスト目的でファイアウォールを無効にします(本番環境では行わないでください)。
設定変更後、再度pingを実行します。
ping 192.168.1.2
今度は正常に返答が返ってきます。Wiresharkでも確認してみましょう。
- 送信側: リクエスト4発 → レスポンス4発 受信
- 受信側: リクエスト4発受信 → レスポンス4発送信
双方向のやりとりがきれいに確認できます。これで「パケットは届いているが返答がない原因はファイアウォールだった」という調査が完結します。
パケットキャプチャでトラブルシューティングができる理由
Wiresharkでパケットを両端でキャプチャすることで、問題の場所を次のように特定できます。
| 観察内容 | 問題箇所 |
|---|---|
| 送信側でリクエストが出ていない | 送信元の設定・アプリケーションの問題 |
| 受信側にリクエストが届いていない | 送受信間のネットワーク(ルーター・スイッチなど)の問題 |
| リクエストは届いているが返答がない | 受信側のファイアウォール・ポート設定の問題 |
| 返答は送信されているが送信側に届かない | 返路のネットワークの問題 |
コマンドプロンプト上では「応答なし」としか見えない状況でも、パケットキャプチャを使えば問題の切り分けが格段に明確になります。
まとめ
今回はWiresharkを使ったパケットキャプチャの基本として、以下を確認しました。
- Wiresharkのインストールは非常に簡単で、インストール後すぐにキャプチャを開始できます
- IPアドレスを手動設定した2台のPC間で通信環境を構築しました
- ARP によってIPアドレスからMACアドレスが解決される様子をパケットレベルで観察しました
- ICMP(ping) の送受信をキャプチャし、届いているか・返答しているかを両端で確認する方法を学びました
- Windowsファイアウォールがpingをブロックしていた原因を、パケットキャプチャによって特定・確認しました
細かいプロトコルの詳細はわからなくても、パケットキャプチャを使うだけで問題の切り分けが大幅にしやすくなります。まずはWiresharkをインストールして眺めてみるだけでも多くの気づきが得られるはずです。次のステップとして、TCPの3ウェイハンドシェイクなど、より詳細なプロトコルの挙動もぜひ確認してみてください。