tcpdump ユーティリティを使用すると、ネットワーク内を流れるパケットをキャプチャして、ネットワークのトラブルシューティングに役立てることができます。以下は、さまざまなオプションで tcpdump を使用するいくつかの例です。トラフィックは、指定されたフィルターに基づいてキャプチャされます。次のようなさまざまなオプションがあります。
オプション | 説明 |
---|---|
-D | ネットワーク インターフェイスのリストを出力します。 |
-i | キャプチャするインターフェイスを指定します。 |
-c | 受信するパケット数を指定します。 |
-v、-vv、-vvv | 詳細レベルを上げます (詳細)。 |
-w | キャプチャしたデータをファイルに書き込みます。 |
-r | ファイルからキャプチャされたデータを読み取ります。 |
tcpdump ユーティリティのインストール
ほとんどの UNIX/Linux システムでは、tcpdump パッケージが既にインストールされていることはありません。最新バージョンをインストールするには、システムで適切なパッケージ マネージャーを使用します。たとえば、CentOS/RHEL サーバーの場合:
# yum install tcpdump
ネットワークのトラブルシューティングに tcpdump を使用する例
1.ネットワーク インターフェースのリストを表示
tcpdump がパケットをキャプチャできるネットワーク インターフェイスのリストを出力するには:
# tcpdump -D 1.eth0 2.nflog (Linux netfilter log (NFLOG) interface) 3.nfqueue (Linux netfilter queue (NFQUEUE) interface) 4.any (Pseudo-device that captures on all interfaces) 5.lo [Loopback]
2.特定のインターフェースでのキャプチャ
「tcpdump -D」コマンドからわかるように、ネットワーク インターフェイスごとに番号とインターフェイス名が出力されます。インターフェイス名または番号を -i に指定できます キャプチャするインターフェイスを指定するフラグ。たとえば、インターフェイス eth0 でパケットをキャプチャするには:
# tcpdump -i 1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 01:26:51.118038 IP ec2-54-159-106-120.compute-1.amazonaws.com.48021 > geeklab.31297: Flags [S], seq 3960153353, win 26883, options [mss 1460,sac kOK,TS val 2229362922 ecr 0,nop,wscale 7], length 0 01:26:51.118072 IP geeklab.31297 > ec2-54-159-106-120.compute-1.amazonaws.com.48021: Flags [S.], seq 547340507, ack 3960153354, win 26847, optio ns [mss 8961,sackOK,TS val 5714985 ecr 2229362922,nop,wscale 7], length 0
この例では、出力は Ctrl + C を押して終了するまで続きます。
3.特定の数のパケットのみをキャプチャ
特定の数のパケットを受信した後に tcpdump を終了するには、-c (カウント) を使用します オプションの後に、受信するパケット数を指定します。次の例では、2 つのパケットをキャプチャします:
# tcpdump -i 1 -c 2 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 01:37:08.956549 IP 182.100.67.76.38819 > geeklab.ssh: Flags [P.], seq 542149092:542149176, ack 774431931, win 271, options [nop,nop,TS val 26493 51 ecr 6332468], length 84 01:37:08.956575 IP geeklab.ssh > 182.100.67.76.38819: Flags [.], ack 84, win 230, options [nop,nop,TS val 6332824 ecr 2649351], length 0 2 packets captured 6 packets received by filter 0 packets dropped by kernel
この例に示すように、tcpdump がパケットのキャプチャを完了すると、次のように報告されます:
- キャプチャされたパケット :これは、tcpdump が受信して処理したパケットの数です。
- フィルタによって受信されたパケット :フィルタはコマンド ラインで指定でき、定義されたフィルタに一致するパケットのみが tcpdump によって処理され、カウントされます。
- カーネルによってドロップされたパケット :これは、バッファ スペースの不足が原因でドロップされたパケットの数です。 -B オプションを使用してバッファ サイズを設定します。
4.出力の詳細 (詳細) を増やします
出力の詳細 (詳細) を増やすには、-v を使用します。 オプション、または -vv さらに詳細な出力、または -vvv 出力の最も詳細なレベル:
# tcpdump –i 1 –v # tcpdump –i 1 -vv # tcpdump –i 1 –vvv
5.データをファイルにキャプチャ
-w を指定して tcpdump ユーティリティを使用する オプションを使用すると、キャプチャしたデータをファイルに書き込むことができます。これにより、取得したデータを Wireshark などの他のネットワーク分析ツールで読み取ることができます。次の例では、capture.out という名前のファイルにデータをキャプチャします:
# tcpdump –i 1 –v –c2 –w capture.out
6.キャプチャされたデータの読み取り
–r を使用して、キャプチャされたデータをファイルから読み取ることもできます。 オプション:
# tcpdump –r capture_file
tcpdump コマンドのその他の例
tcpdump では、他の多くのオプションと引数を使用できます。以下は、tcpdump ユーティリティの能力を示す具体的な例です。
1. 2 つのホスト間のトラフィックを表示
2 つのホスト (変数 host1 と host2 で表される) 間のすべてのトラフィックを表示するには:
# tcpdump host host1 and host2
2.送信元または宛先ホストからのトラフィックのみを表示
送信元 (src) または宛先 (dst) ホストからのトラフィックのみを表示するには:
# tcpdump src host # tcpdump dst host
3.特定のプロトコルのトラフィックを表示
特定のプロトコル (tcp、udp、icmp、arp など) のトラフィックのみを表示するには、プロトコルを引数として指定します。
# tcpdump protocol
たとえば、tcp トラフィックのトラフィックのみを表示するには:
# tcpdump tcp
4.送信元ポートまたは宛先ポートに基づくフィルタリング
送信元ポートまたは宛先ポートに基づいてフィルタリングするには:
# tcpdump src port ftp # tcpdump dst port http
tcpdump ユーティリティは、ブール演算子 (AND、NOT、OR) および演算子のグループ化も受け入れ、ネットワーク データをキャプチャするための複雑なフィルターを作成できます。