tcpdump は、ネットワークの問題のトラブルシューティングに効果的に役立つ、柔軟で強力なパケット キャプチャ ツールです。 管理者としての私の経験では、トラブルシューティングが非常に難しいネットワーク接続の問題に頻繁に遭遇します。このような状況では、tcpdump が役立ちます。 tcpdump は、システムを通過するパケット トラフィックをキャプチャして分析できるコマンド ライン ユーティリティです。セキュリティ ツールとしてだけでなく、ネットワークのトラブルシューティング ツールとしてもよく使用されます。 Tcpdump は、さまざまなオプションとフィルタリング ルールをサポートし、幅広いシナリオに適用できる強力なツールです。これはコマンドライン ツールなので、後で分析するためにグラフィカル インターフェイスのないリモート サーバーまたはデバイスでデータ パケットを収集するのに適しています。バックグラウンドで起動することも、cron などのタイミング ツールを使用してスケジュールされたタスクを作成し、有効にすることもできます。 この記事では、tcpdump の最もよく使用される機能のいくつかについて説明します。 1. Linuxにtcpdumpをインストールする tcpdump は多くの Linux ディストリビューションをサポートしているため、システムにすでにインストールされている可能性が高いです。次のコマンドを使用して、tcpdump がインストールされているかどうかを確認します。 $ どのtcpdump tcpdump は、 tcpdump がインストールされていない場合は、パッケージ マネージャーを使用してインストールできます。 たとえば、CentOS または Red Hat Enterprise システムでは、次のコマンドを使用して tcpdump をインストールします。 $ sudo yum インストール -y tcpdump tcpdump は、ネットワーク パケットをキャプチャするために使用されるライブラリである libpcap に依存します。ライブラリ ファイルがインストールされていない場合は、依存関係に基づいてシステムが自動的にインストールします。 これでパケットのキャプチャを開始できます。 2. tcpdumpを使用してパケットをキャプチャする tcpdump を使用してパケットをキャプチャするには管理者権限が必要なので、次の例のコマンドのほとんどは sudo で始まります。 まず、tcpdump -D コマンドを使用して、パケットをキャプチャできるネットワーク インターフェイスを一覧表示します。 $ sudo tcpdump -D eth0 virbr0 eth1 any (すべてのインターフェースでキャプチャする疑似デバイス) lo [ループバック] 上記のように、パケットをキャプチャできるマシン上のすべてのネットワーク インターフェイスを確認できます。特別なインターフェース any を使用すると、すべてのアクティブなネットワーク インターフェースからパケットをキャプチャできます。 任意のインターフェース上のパケットをキャプチャするには、次のコマンドを使用します。 $ sudo tcpdump -i 任意 tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 09:56:18.293641 IP rhel75.localdomain.ssh > 192.168.64.1.56322: フラグ [P.]、シーケンス 3770820720:3770820916、ack 3503648727、win 309、オプション [nop、nop、TS 値 76577898 ecr 510770929]、長さ 196 09:56:18.293794 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: フラグ [.]、ack 196、win 391、オプション [nop、nop、TS val 510771017 ecr 76577898]、長さ 0 09:56:18.295058 IP rhel75.59883 > ゲートウェイ.ドメイン: 2486+ PTR? 1.64.168.192.in-addr.arpa. (43) 09:56:18.310225 IP ゲートウェイ.ドメイン > rhel75.59883: 2486 NXDomain* 0/1/0 (102) 09:56:18.312482 IP rhel75.49685 > ゲートウェイ.ドメイン: 34242+ PTR? 28.64.168.192.in-addr.arpa. (44) 09:56:18.322425 IP ゲートウェイ.ドメイン > rhel75.49685: 34242 NXDomain* 0/1/0 (103) 09:56:18.323164 IP rhel75.56631 > ゲートウェイ.ドメイン: 29904+ PTR? 1.122.168.192.in-addr.arpa. (44) 09:56:18.323342 IP rhel75.localdomain.ssh > 192.168.64.1.56322: フラグ [P.]、シーケンス 196:584、ack 1、win 309、オプション [nop、nop、TS 値 76577928 ecr 510771017]、長さ 388 09:56:18.323563 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: フラグ [.]、ack 584、win 411、オプション [nop、nop、TS val 510771047 ecr 76577928]、長さ 0 09:56:18.335569 IP ゲートウェイ.ドメイン > rhel75.56631: 29904 NXDomain* 0/1/0 (103) 09:56:18.336429 IP rhel75.44007 > ゲートウェイ.ドメイン: 61677+ PTR? 98.122.168.192.in-addr.arpa. (45) 09:56:18.336655 IP ゲートウェイ.ドメイン > rhel75.44007: 61677* 1/0/0 PTR rhel75. (65) 09:56:18.337177 IP rhel75.localdomain.ssh > 192.168.64.1.56322: フラグ [P.]、シーケンス 584:1644、ack 1、win 309、オプション [nop、nop、TS 値 76577942 ecr 510771047]、長さ 1060 ---- 長い出力をスキップ ----- 09:56:19.342939 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: フラグ [.]、ack 1752016、win 1444、オプション [nop、nop、TS val 510772067 ecr 76578948]、長さ 0 ^C 9003 パケットをキャプチャしました フィルタによって受信されたパケット数 9010 カーネルによってドロップされた 7 つのパケット $ tcpdump は割り込み信号を受信するまでパケットのキャプチャを続けます。 Ctrl+C を押すとパケットのキャプチャを停止できます。上記の例に示すように、tcpdump は 9000 を超えるパケットをキャプチャしました。この例では、ssh 経由でサーバーに接続しているため、tcpdump はこれらのパケットもすべてキャプチャします。 -c オプションを使用すると、tcpdump によってキャプチャされるパケットの数を制限できます。 $ sudo tcpdump -i 任意 -c 5 tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 11:21:30.242740 IP rhel75.localdomain.ssh > 192.168.64.1.56322: フラグ [P.]、シーケンス 3772575680:3772575876、ack 3503651743、win 309、オプション [nop、nop、TS 値 81689848 ecr 515883153]、長さ 196 11:21:30.242906 IP 192.168.64.1.56322 > rhel75.localdomain.ssh: フラグ [.]、ack 196、win 1443、オプション [nop、nop、TS val 515883235 ecr 81689848]、長さ 0 11:21:30.244442 IP rhel75.43634 > ゲートウェイ.ドメイン: 57680+ PTR? 1.64.168.192.in-addr.arpa. (43) 11:21:30.244829 IP ゲートウェイ.ドメイン > rhel75.43634: 57680 NXDomain 0/0/0 (43) 11:21:30.247048 IP rhel75.33696 > ゲートウェイ.ドメイン: 37429+ PTR? 28.64.168.192.in-addr.arpa. (44) 5パケットをキャプチャ フィルタによって受信されたパケット数 12 カーネルによってドロップされたパケット数: 0 $ 上記のように、tcpdump は 5 つのパケットをキャプチャした後、自動的にパケットのキャプチャを停止します。これは、たとえば分析のために少数のパケットのみをキャプチャする必要がある場合など、いくつかのシナリオで非常に便利です。フィルタリング ルールを使用して特定のパケットをキャプチャする必要がある場合 (以下に示すように)、-c の役割が非常に重要になります。 上記の例では、tcpdump はデフォルトで IP アドレスとポート番号を対応するインターフェース名とサービス プロトコル名に解決します。通常、ネットワークのトラブルシューティングでは、IP アドレスとポート番号を使用して問題を分析する方が簡単です。IP アドレスを表示するには -n オプションを使用し、ポート番号を表示するには -nn オプションを使用します。 $ sudo tcpdump -i 任意 -c5 -nn tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 23:56:24.292206 IP 192.168.64.28.22 > 192.168.64.1.35110: フラグ [P.]、シーケンス 166198580:166198776、ack 2414541257、win 309、オプション [nop、nop、TS 値 615664 ecr 540031155]、長さ 196 23:56:24.292357 IP 192.168.64.1.35110 > 192.168.64.28.22: フラグ [.]、ack 196、win 1377、オプション [nop、nop、TS val 540031229 ecr 615664]、長さ 0 23:56:24.292570 IP 192.168.64.28.22 > 192.168.64.1.35110: フラグ [P.]、シーケンス 196:568、ack 1、win 309、オプション [nop、nop、TS 値 615664 ecr 540031229]、長さ 372 23:56:24.292655 IP 192.168.64.1.35110 > 192.168.64.28.22: フラグ [.]、ack 568、win 1400、オプション [nop、nop、TS val 540031229 ecr 615664]、長さ 0 23:56:24.292752 IP 192.168.64.28.22 > 192.168.64.1.35110: フラグ [P.]、シーケンス 568:908、ack 1、win 309、オプション [nop、nop、TS 値 615664 ecr 540031229]、長さ 340 5パケットをキャプチャ フィルタによって受信された 6 つのパケット カーネルによってドロップされたパケット数: 0 上記のように、キャプチャされたデータ パケットには IP アドレスとポート番号が表示されます。これにより、tcpdump が DNS ルックアップを発行することも防止され、ネットワークのトラブルシューティング時にデータ トラフィックを削減するのに役立ちます。 パケットをキャプチャする方法がわかったので、キャプチャされたパケット出力の意味を分析してみましょう。 3. キャプチャされたメッセージを理解する tcpdump は、TCP、UDP、ICMP など、さまざまなプロトコル タイプのデータ パケットをキャプチャしてデコードできます。ここですべてのデータグラム タイプを紹介することは不可能ですが、開始するにあたって役立つように TCP タイプのデータグラムを分析することはできます。 tcpdump の詳細については、ヘルプ マニュアルを参照してください。 tcpdump によってキャプチャされた TCP パケットは次のようになります。 08:41:13.729687 IP 192.168.64.28.22 > 192.168.64.1.41916: フラグ [P.]、シーケンス 196:568、ack 1、win 309、オプション [nop、nop、TS 値 117964079 ecr 816509256]、長さ 372 具体的なフィールドはメッセージの種類によって異なりますが、上記の例は一般的な形式です。 最初のフィールド 08:41:13.729687 は、データ パケットがキャプチャされたときのシステム ローカル タイムスタンプです。 次に、IP はネットワーク層プロトコルの種類です。ここでは IPv4 ですが、IPv6 プロトコルの場合はフィールド値は IP6 になります。 192.168.64.28.22 は送信元 IP アドレスとポート番号であり、その後に宛先 IP アドレスとそのポート番号が続きます。ここでは 192.168.64.1.41916 です。 送信元 IP と宛先 IP の後に、TCP メッセージ マーカー セグメント フラグ [P.] が表示されます。このフィールドは通常、次の値を取ります。 このフィールドは、SYN-ACK パケットの [S.] など、これらの値の組み合わせになることもあります。 次に、そのパケット内のデータのシーケンス番号が続きます。最初にキャプチャされたデータ パケットの場合、フィールド値は絶対数であり、後続のパケットではクエリと追跡を容易にするために相対値が使用されます。たとえば、ここで seq 196:568 は、データ パケットにデータ ストリームのバイト 196 から 568 が含まれていることを意味します。 次は ack 値: ack 1 です。このパケットはデータ送信者であり、ack 値は 1 です。データ受信側では、このフィールドはデータ ストリーム上の次の予想されるデータ バイトを表します。たとえば、データ ストリーム内の次のデータ パケットの ack 値は 568 になります。 次のフィールドは受信ウィンドウ サイズ win 309 で、受信バッファで使用可能なバイト数を示し、その後に MSS (最大セグメント サイズ) やウィンドウ比率値などの TCP オプションが続きます。 TCP プロトコルの詳細については、「伝送制御プロトコル (TCP) パラメータ」を参照してください。 最後に、長さ 372 はパケット ペイロードの長さをバイト単位で表します。この長さは、seq シーケンス番号のバイト値の長さとは異なります。 次に、データ パケットをフィルター処理して、問題の分析と特定を容易にする方法を学びます。 4. データパケットのフィルタリング 上で述べたように、tcpdump は多くの種類のデータ パケットをキャプチャできますが、その多くは検出する必要のある問題とは関係がない可能性があります。たとえば、Web サーバーへの接続に関するネットワークの問題を特定する場合、SSH データグラムを気にする必要はないため、パケット キャプチャ結果で SSH パケットを除外すると、問題の分析が容易になります。 tcpdump には、送信元 IP アドレスと宛先 IP アドレス、ポート番号、プロトコルなどに基づいてパケットをフィルタリングするなど、パケット フィルタリング ルールを設定するための多くのパラメーター オプションがあります。 最も一般的に使用されるフィルタリング方法をいくつか紹介します。 プロトコル コマンドでプロトコルを指定すると、プロトコル タイプに基づいてパケットをフィルターできます。たとえば、ICMP メッセージのみをキャプチャするには、次のコマンドを使用します。 $ sudo tcpdump -i 任意 -c5 icmp tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 次に、別のターミナルを開き、別のマシンに ping を実行します。 $ ping opensource.com PING opensource.com (54.204.39.132) 56(84) バイトのデータ。 ec2-54-204-39-132.compute-1.amazonaws.com (54.204.39.132) からの 64 バイト: icmp_seq=1 ttl=47 time=39.6 ms tcpdump コマンドを実行しているターミナルに戻ると、ICMP メッセージがフィルタリングされていることがわかります。ここで、tcpdump は opensource.com に関連するドメイン名解決データ パケットを表示しません。 09:34:20.136766 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP エコー要求、ID 20361、シーケンス 1、長さ 64 09:34:20.176402 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP エコー応答、ID 20361、シーケンス 1、長さ 64 09:34:21.140230 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP エコー要求、ID 20361、シーケンス 2、長さ 64 09:34:21.180020 IP ec2-54-204-39-132.compute-1.amazonaws.com > rhel75: ICMP エコー応答、ID 20361、シーケンス 2、長さ 64 09:34:22.141777 IP rhel75 > ec2-54-204-39-132.compute-1.amazonaws.com: ICMP エコー要求、ID 20361、シーケンス 3、長さ 64 5パケットをキャプチャ フィルタによって受信された 5 つのパケット カーネルによってドロップされたパケット数: 0 ホスト 特定のホストに関連するパケットのみをキャプチャするには、ホスト パラメータを使用します。 $ sudo tcpdump -i 任意 -c5 -nn ホスト 54.204.39.132 tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 09:54:20.042023 IP 192.168.122.98.39326 > 54.204.39.132.80: フラグ [S]、シーケンス 1375157070、win 29200、オプション [mss 1460、sackOK、TS 値 122350391 ecr 0、nop、wscale 7]、長さ 0 09:54:20.088127 IP 54.204.39.132.80 > 192.168.122.98.39326: フラグ [S.]、シーケンス 1935542841、ack 1375157071、win 28960、オプション [mss 1460、sackOK、TS val 522713542 ecr 122350391、nop、wscale 9]、長さ 0 09:54:20.088204 IP 192.168.122.98.39326 > 54.204.39.132.80: フラグ [.]、ack 1、win 229、オプション [nop、nop、TS val 122350437 ecr 522713542]、長さ 0 09:54:20.088734 IP 192.168.122.98.39326 > 54.204.39.132.80: フラグ [P.]、シーケンス 1:113、ack 1、win 229、オプション [nop、nop、TS 値 122350438 ecr 522713542]、長さ 112: HTTP: GET / HTTP/1.1 09:54:20.129733 IP 54.204.39.132.80 > 192.168.122.98.39326: フラグ [.]、ack 113、win 57、オプション [nop、nop、TS val 522713552 ecr 122350438]、長さ 0 5パケットをキャプチャ フィルタによって受信された 5 つのパケット カーネルによってドロップされたパケット数: 0 上記のように、54.204.39.132 に関連するパケットのみがキャプチャされ、表示されます。 ポート番号 tcpdump は、サービス タイプまたはポート番号に基づいてパケットをフィルターできます。たとえば、HTTP サービスに関連するデータ パケットをキャプチャします。 $ sudo tcpdump -i 任意 -c5 -nn ポート80 tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 09:58:28.790548 IP 192.168.122.98.39330 > 54.204.39.132.80: フラグ [S]、シーケンス 1745665159、win 29200、オプション [mss 1460、sackOK、TS 値 122599140 ecr 0、nop、wscale 7]、長さ 0 09:58:28.834026 IP 54.204.39.132.80 > 192.168.122.98.39330: フラグ [S.]、シーケンス 4063583040、ack 1745665160、win 28960、オプション [mss 1460、sackOK、TS 値 522775728 ecr 122599140、nop、wscale 9]、長さ 0 09:58:28.834093 IP 192.168.122.98.39330 > 54.204.39.132.80: フラグ [.]、ack 1、win 229、オプション [nop、nop、TS val 122599183 ecr 522775728]、長さ 0 09:58:28.834588 IP 192.168.122.98.39330 > 54.204.39.132.80: フラグ [P.]、シーケンス 1:113、ack 1、win 229、オプション [nop、nop、TS 値 122599184 ecr 522775728]、長さ 112: HTTP: GET / HTTP/1.1 09:58:28.878445 IP 54.204.39.132.80 > 192.168.122.98.39330: フラグ [.]、ack 113、win 57、オプション [nop、nop、TS val 522775739 ecr 122599184]、長さ 0 5パケットをキャプチャ フィルタによって受信された 5 つのパケット カーネルによってドロップされたパケット数: 0 IPアドレス/ホスト名 同様に、送信元 IP アドレス、宛先 IP アドレス、またはホスト名に基づいてパケットをフィルタリングすることもできます。たとえば、送信元 IP アドレスが 192.168.122.98 のデータ パケットをキャプチャするには、次のようにします。 $ sudo tcpdump -i 任意 -c5 -nn src 192.168.122.98 tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 10:02:15.220824 IP 192.168.122.98.39436 > 192.168.122.1.53: 59332+ A? opensource.com. (32) 10:02:15.220862 IP 192.168.122.98.39436 > 192.168.122.1.53: 20749+ AAAA? opensource.com. (32) 10:02:15.364062 IP 192.168.122.98.39334 > 54.204.39.132.80: フラグ [S]、シーケンス 1108640533、win 29200、オプション [mss 1460、sackOK、TS 値 122825713 ecr 0、nop、wscale 7]、長さ 0 10:02:15.409229 IP 192.168.122.98.39334 > 54.204.39.132.80: フラグ [.]、ack 669337581、win 229、オプション [nop、nop、TS val 122825758 ecr 522832372]、長さ 0 10:02:15.409667 IP 192.168.122.98.39334 > 54.204.39.132.80: フラグ [P.]、シーケンス 0:112、ack 1、win 229、オプション [nop、nop、TS 値 122825759 ecr 522832372]、長さ 112: HTTP: GET / HTTP/1.1 5パケットをキャプチャ フィルタによって受信された 5 つのパケット カーネルによってドロップされたパケット数: 0 この例では、送信元 IP アドレス 192.168.122.98 のポート 53 とポート 80 からのパケットがキャプチャされており、それらのパケットの送信元 IP アドレスが変更されたため、応答パケットは表示されないことに注意してください。 対照的に、dst を使用すると、宛先 IP/ホスト名によってパケットがフィルタリングされます。 $ sudo tcpdump -i 任意 -c5 -nn 送信先 192.168.122.98 tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 10:05:03.572931 IP 192.168.122.1.53 > 192.168.122.98.47049: 2248 1/0/0 A 54.204.39.132 (48) 10:05:03.572944 IP 192.168.122.1.53 > 192.168.122.98.47049: 33770 0/0/0 (32) 10:05:03.621833 IP 54.204.39.132.80 > 192.168.122.98.39338: フラグ [S.]、シーケンス 3474204576、ack 3256851264、win 28960、オプション [mss 1460、sackOK、TS 値 522874425 ecr 122993922、nop、wscale 9]、長さ 0 10:05:03.667767 IP 54.204.39.132.80 > 192.168.122.98.39338: フラグ [.]、ack 113、win 57、オプション [nop、nop、TS val 522874436 ecr 122993972]、長さ 0 10:05:03.672221 IP 54.204.39.132.80 > 192.168.122.98.39338: フラグ [P.]、シーケンス 1:643、ack 113、win 57、オプション [nop、nop、TS 値 522874437 ecr 122993972]、長さ 642: HTTP: HTTP/1.1 302 が見つかりました 5パケットをキャプチャ フィルターによって受信された 5 つのパケット カーネルによってドロップされたパケット数: 0 複数の病状のスクリーニング もちろん、 and および or 論理演算子を使用してフィルタリング ルールを作成し、複数の条件を使用してパケットをフィルタリングすることもできます。たとえば、送信元 IP アドレス 192.168.122.98 からの HTTP パケットをフィルタリングするには、次のようにします。 $ sudo tcpdump -i any -c5 -nn src 192.168.122.98 およびポート 80 tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 10:08:00.472696 IP 192.168.122.98.39342 > 54.204.39.132.80: フラグ [S]、シーケンス 2712685325、win 29200、オプション [mss 1460、sackOK、TS 値 123170822 ecr 0、nop、wscale 7]、長さ 0 10:08:00.516118 IP 192.168.122.98.39342 > 54.204.39.132.80: フラグ [.]、ack 268723504、win 229、オプション [nop、nop、TS val 123170865 ecr 522918648]、長さ 0 10:08:00.516583 IP 192.168.122.98.39342 > 54.204.39.132.80: フラグ [P.]、シーケンス 0:112、ack 1、win 229、オプション [nop、nop、TS 値 123170866 ecr 522918648]、長さ 112: HTTP: GET / HTTP/1.1 10:08:00.567044 IP 192.168.122.98.39342 > 54.204.39.132.80: フラグ [.]、ack 643、win 239、オプション [nop、nop、TS val 123170916 ecr 522918661]、長さ 0 10:08:00.788153 IP 192.168.122.98.39342 > 54.204.39.132.80: フラグ [F.]、シーケンス 112、ack 643、win 239、オプション [nop、nop、TS 値 123171137 ecr 522918661]、長さ 0 5パケットをキャプチャ フィルターによって受信された 5 つのパケット カーネルによってドロップされたパケット数: 0 括弧を使用してより複雑なフィルター ルールを作成することもできますが、シェル式として認識されないように、シェル内でフィルター ルールを引用符で囲んでください。 $ sudo tcpdump -i any -c5 -nn "ポート 80 および (src 192.168.122.98 または src 54.204.39.132)" tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 10:10:37.602214 IP 192.168.122.98.39346 > 54.204.39.132.80: フラグ [S]、シーケンス 871108679、win 29200、オプション [mss 1460、sackOK、TS 値 123327951 ecr 0、nop、wscale 7]、長さ 0 10:10:37.650651 IP 54.204.39.132.80 > 192.168.122.98.39346: フラグ [S.]、シーケンス 854753193、ack 871108680、win 28960、オプション [mss 1460、sackOK、TS 値 522957932 ecr 123327951、nop、wscale 9]、長さ 0 10:10:37.650708 IP 192.168.122.98.39346 > 54.204.39.132.80: フラグ [.]、ack 1、win 229、オプション [nop、nop、TS val 123328000 ecr 522957932]、長さ 0 10:10:37.651097 IP 192.168.122.98.39346 > 54.204.39.132.80: フラグ [P.]、シーケンス 1:113、ack 1、win 229、オプション [nop、nop、TS 値 123328000 ecr 522957932]、長さ 112: HTTP: GET / HTTP/1.1 10:10:37.692900 IP 54.204.39.132.80 > 192.168.122.98.39346: フラグ [.]、ack 113、win 57、オプション [nop、nop、TS val 522957942 ecr 123328000]、長さ 0 5パケットをキャプチャ フィルタによって受信された 5 つのパケット カーネルによってドロップされたパケット数: 0 この例では、送信元 IP 192.168.122.98 または 54.204.39.132 からの HTTP (ポート番号 80) パケットのみをキャプチャします。この方法を使用すると、データ ストリーム内で相互作用する 2 つのパーティのデータ パケットを簡単にキャプチャできます。 5. データパケットの内容を確認する 上記の例では、送信元アドレス、宛先アドレス、ポート番号などのパケット ヘッダーの情報に基づいてパケットをフィルターするルールのみを設定しています。場合によっては、ネットワーク接続の問題を分析する必要があり、送信する必要があるものと受信する必要があるものを判断するために、データ パケットの内容を分析する必要があることがあります。 tcpdump には、パケットの内容を表示するための 2 つのオプションがあります。-X はデータグラムの内容を 16 進数で出力し、-A はデータグラムの ASCII 値を出力します。 たとえば、HTTP 要求メッセージの内容は次のようになります。 $ sudo tcpdump -i 任意 -c10 -nn -A ポート80 tcpdump: 詳細な出力は抑制されています。完全なプロトコル デコードには -v または -vv を使用してください。 任意でリッスン、リンクタイプ LINUX_SLL (Linux クック)、キャプチャサイズ 262144 バイト 13:02:14.871803 IP 192.168.122.98.39366 > 54.204.39.132.80: フラグ [S]、シーケンス 2546602048、win 29200、オプション [mss 1460、sackOK、TS 値 133625221 ecr 0、nop、wscale 7]、長さ 0 E..<..@[email protected].'[email protected]............ ............................. 13:02:14.910734 IP 54.204.39.132.80 > 192.168.122.98.39366: フラグ [S.]、シーケンス 1877348646、ack 2546602049、win 28960、オプション [mss 1460、sackOK、TS 値 525532247 ecr 133625221、nop、wscale 9]、長さ 0 E..<..@./..a6.'...zb.P..o..&...A..q a.......... .RW........................................... 13:02:14.910832 IP 192.168.122.98.39366 > 54.204.39.132.80: フラグ [.]、ack 1、win 229、オプション [nop、nop、TS val 133625260 ecr 525532247]、長さ 0 E..4..@[email protected].'....P...Ao..'........... .....RW............... 13:02:14.911808 IP 192.168.122.98.39366 > 54.204.39.132.80: フラグ [P.]、シーケンス 1:113、ack 1、win 229、オプション [nop、nop、TS 値 133625261 ecr 525532247]、長さ 112: HTTP: GET / HTTP/1.1 E.....@[email protected].'....P...Ao..'........... .....R.WGET / HTTP/1.1 ユーザーエージェント: Wget/1.14 (linux-gnu) 受け入れる: */* ホスト: opensource.com 接続: キープアライブ ................ 13:02:14.951199 IP 54.204.39.132.80 > 192.168.122.98.39366: フラグ [.]、ack 113、win 57、オプション [nop、nop、TS val 525532257 ecr 133625261]、長さ 0 E..4.F@./.."6.'...zb.P..o..'.......9.2..... .ラ................. 13:02:14.955030 IP 54.204.39.132.80 > 192.168.122.98.39366: フラグ [P.]、シーケンス 1:643、ack 113、win 57、オプション [nop、nop、TS 値 525532258 ecr 133625261]、長さ 642: HTTP: HTTP/1.1 302 が見つかりました E....G@./...6.'...zb.P..o..'.......9....... .Rb...HTTP/1.1 302 が見つかりました サーバー: nginx 日付: 2018年9月23日(日)17:02:14 GMT コンテンツタイプ: text/html; 文字セット=iso-8859-1 コンテンツの長さ: 207 X-Content-Type オプション: nosniff 場所: https://opensource.com/ キャッシュ制御: max-age=1209600 有効期限: 2018年10月7日(日)17:02:14 GMT XリクエストID: v-6baa3acc-bf52-11e8-9195-22000ab8cf2d X-ワニス: 632951979 年齢: 0 経由: 1.1 ワニス (Varnish/5.2) X-キャッシュ: ミス 接続: キープアライブ <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>302 が見つかりました</title> </head><body> <h1>見つかりました</h1> <p>ドキュメントは <a href="https://opensource.com/">こちら</a> に移動しました。</p> </body></html> ................ 13:02:14.955083 IP 192.168.122.98.39366 > 54.204.39.132.80: フラグ [.]、ack 643、win 239、オプション [nop、nop、TS val 133625304 ecr 525532258]、長さ 0 E..4..@[email protected].'....P....o.............. .....Rb............. 13:02:15.195524 IP 192.168.122.98.39366 > 54.204.39.132.80: フラグ [F.]、シーケンス 113、ack 643、win 239、オプション [nop、nop、TS 値 133625545 ecr 525532258]、長さ 0 E..4..@[email protected].'....P....o.............. .....Rb............. 13:02:15.236592 IP 54.204.39.132.80 > 192.168.122.98.39366: フラグ [F.]、シーケンス 643、ack 114、win 57、オプション [nop、nop、TS 値 525532329 ecr 133625545]、長さ 0 E..4.H@./.. 6.'...zb.P..o..........9.I..... .R............................. 13:02:15.236656 IP 192.168.122.98.39366 > 54.204.39.132.80: フラグ [.]、ack 644、win 239、オプション [nop、nop、TS val 133625586 ecr 525532329]、長さ 0 E..4..@[email protected].'....P....o.............. .....R.............. 10パケットをキャプチャ フィルタによって受信されたパケット数 10 カーネルによってドロップされたパケット数: 0 これは、一般的な HTTP 呼び出し API インターフェースの問題を見つけるのに非常に役立ちます。もちろん、暗号化されたメッセージの場合、この出力はあまり役に立ちません。 6. キャプチャしたデータを保存する tcpdump は、キャプチャしたパケット データを保存し、後でデータ パケットを分析する機能を提供します。たとえば、夜間にパケットをキャプチャし、朝に分析することができます。同様に、データ パケットが多数ある場合、それらをあまりにも速く表示すると分析に役立ちません。データ パケットを保存すると、問題の分析に役立ちます。 キャプチャしたパケットを画面に表示する代わりに、パケットを保存するには、-w オプションを使用します。 $ sudo tcpdump -i any -c10 -nn -w webserver.pcap ポート 80 [sudo] ricardoのパスワード: tcpdump: 任意でリッスン、リンクタイプ LINUX_SLL (Linux で調理済み)、キャプチャサイズ 262144 バイト 10パケットをキャプチャ フィルタによって受信されたパケット数 10 カーネルによってドロップされたパケット数: 0 このコマンドは、キャプチャされたデータ パケットを webserver.pcap ファイルに保存します。接尾辞 pcap は、ファイルがキャプチャされたデータ パケットの形式であることを示します。 例に示すように、データ パケットがファイルに保存されると、画面には出力されません。-c10 は、10 個のデータ パケットがキャプチャされた後にキャプチャが停止することを意味します。パケットが実際にキャプチャされたかどうかのフィードバックが必要な場合は、-v オプションを使用します。 tcpdump はパケットをバイナリ ファイルに保存するため、テキスト エディターで簡単に開くことはできません。ファイル内のメッセージの内容を読み込むには、-r オプション パラメータを使用します。 $ tcpdump -nn -r ウェブサーバー.pcap ファイル webserver.pcap からの読み取り、リンク タイプ LINUX_SLL (Linux で処理済み) 13:36:57.679494 IP 192.168.122.98.39378 > 54.204.39.132.80: フラグ [S]、シーケンス 3709732619、win 29200、オプション [mss 1460、sackOK、TS 値 135708029 ecr 0、nop、wscale 7]、長さ 0 13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: フラグ [S.]、シーケンス 1999298316、ack 3709732620、win 28960、オプション [mss 1460、sackOK、TS 値 526052949 ecr 135708029、nop、wscale 9]、長さ 0 13:36:57.719005 IP 192.168.122.98.39378 > 54.204.39.132.80: フラグ [.]、ack 1、win 229、オプション [nop、nop、TS val 135708068 ecr 526052949]、長さ 0 13:36:57.719186 IP 192.168.122.98.39378 > 54.204.39.132.80: フラグ [P.]、シーケンス 1:113、ack 1、win 229、オプション [nop、nop、TS 値 135708068 ecr 526052949]、長さ 112: HTTP: GET / HTTP/1.1 13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: フラグ [.]、ack 113、win 57、オプション [nop、nop、TS val 526052959 ecr 135708068]、長さ 0 13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: フラグ [P.]、シーケンス 1:643、ack 113、win 57、オプション [nop、nop、TS 値 526052959 ecr 135708068]、長さ 642: HTTP: HTTP/1.1 302 が見つかりました 13:36:57.760182 IP 192.168.122.98.39378 > 54.204.39.132.80: フラグ [.]、ack 643、win 239、オプション [nop、nop、TS val 135708109 ecr 526052959]、長さ 0 13:36:57.977602 IP 192.168.122.98.39378 > 54.204.39.132.80: フラグ [F.]、シーケンス 113、ack 643、win 239、オプション [nop、nop、TS 値 135708327 ecr 526052959]、長さ 0 13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: フラグ [F.]、シーケンス 643、ack 114、win 57、オプション [nop、nop、TS 値 526053025 ecr 135708327]、長さ 0 13:36:58.022132 IP 192.168.122.98.39378 > 54.204.39.132.80: フラグ [.]、ack 644、win 239、オプション [nop、nop、TS val 135708371 ecr 526053025]、長さ 0 $ 現時点ではネットワーク インターフェイスでパケットがキャプチャされていないため、管理者権限 sudo は必要ありません。 ライブ データの場合と同様に、これまでに説明したフィルタリング ルールのいずれかを使用して、ファイル内のコンテンツをフィルタリングすることもできます。 たとえば、次のコマンドを実行して、送信元 IP アドレス 54.204.39.132 からのファイル内のパケットを調べます。 $ tcpdump -nn -r webserver.pcap src 54.204.39.132 ファイル webserver.pcap からの読み取り、リンク タイプ LINUX_SLL (Linux で処理済み) 13:36:57.718932 IP 54.204.39.132.80 > 192.168.122.98.39378: フラグ [S.]、シーケンス 1999298316、ack 3709732620、win 28960、オプション [mss 1460、sackOK、TS 値 526052949 ecr 135708029、nop、wscale 9]、長さ 0 13:36:57.756979 IP 54.204.39.132.80 > 192.168.122.98.39378: フラグ [.]、ack 113、win 57、オプション [nop、nop、TS val 526052959 ecr 135708068]、長さ 0 13:36:57.760122 IP 54.204.39.132.80 > 192.168.122.98.39378: フラグ [P.]、シーケンス 1:643、ack 113、win 57、オプション [nop、nop、TS 値 526052959 ecr 135708068]、長さ 642: HTTP: HTTP/1.1 302 が見つかりました 13:36:58.022089 IP 54.204.39.132.80 > 192.168.122.98.39378: フラグ [F.]、シーケンス 643、ack 114、win 57、オプション [nop、nop、TS 値 526053025 ecr 135708327]、長さ 0 次は何ですか? 上記の基本機能は、強力な tcpdump パケット キャプチャ ツールの使用に役立ちます。詳細については、tcpdump の Web サイトとそのヘルプ ファイルを参照してください。 tcpdump コマンドライン ツールは、ネットワーク トラフィック パケットを分析するための強力な柔軟性を提供します。パケットをキャプチャするためにグラフィカル ツールを使用する必要がある場合は、Wireshark を参照してください。 Wireshark は、tcpdump によって保存された pcap ファイルを読み取るためにも使用できます。 tcpdump コマンドラインを使用すると、GUI インターフェイスのないリモート マシン上のパケットをキャプチャし、Wireshark でパケットを分析できます。 出典: https://opensource.com/article/18/10/introduction-tcpdump 要約する 上記は、Linux コマンドラインで tcpdump を使用してパケットをキャプチャする機能の一部です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残していただければ、すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: WeChatアプレットの入力ジッター問題を解決する方法
>>: MySQL データベースは SQL ステートメントを知っている必要があります (拡張バージョン)
docker コンテナの下に kong クラスターを構築するのは非常に簡単です。公式サイトの紹介も非...
目次序文フィルターとは何かフィルターの使い方グローバルフィルターローカルフィルターフィルターは直列に...
MySQL ログ システムで最も重要なログは、REDO ログとアーカイブ ログです。後者は MySQ...
私たちが構築しようとしていたウェブサイトには、長い文章だけでなく、多数の表も含まれており、表のレイア...
1. Pythonのインストール1. フォルダーを作成します。 mkdir python フォルダ...
序文フロントエンド開発では、配列内に要素が存在するかどうかを判断する必要があることがよくあります。実...
注:記事に誤りがある場合は、メッセージを残して指摘してください。ご協力ありがとうございます。名前名前...
目次最初のステップはMySQLをダウンロードすることですステップ2: ダウンロードした圧縮パッケージ...
SQL (Structured Query Language) ステートメント、つまり構造化クエリ言...
この記事の例では、日付と時刻の選択を実装するための uniapp の具体的なコードを参考までに共有し...
ほとんどの人はMySQLをコンパイルしてシステムディレクトリに置きますが、私のやり方はコンパイルした...
目次序文複数の言語を切り替えるにはどうすればいいですか? 1. vue-i18nパッケージをインスト...
この記事の例では、参考までにvueタイムラインコンポーネントの具体的な実装コードを共有しています。具...
目次1. 異なるリクエストパスに応じて異なるデータを返す方法を学びます。 2. 送信データ: データ...
docker-compose.yml に extra_hosts キーワードを追加すると、コンテナの...