このガイドでは、Linux システムに tcpdump をインストールする方法と、tcpdump を使用して TCP/IP パケットをキャプチャして分析する方法を説明します。
Tcpdumpをインストールする方法
Tcpdump は、多くの Linux ディストリビューションにプレインストールされています。ただし、システムに tcpdump がまだインストールされていない場合は、Linux システムに tcpdump をインストールできます。 Ubuntu 22.04 システムに tcpdump をインストールするには、次のコマンドを使用します。
$ sudo apt install tcpdump
Fedora/CentOS に tcpdump をインストールするには、次のコマンドを使用します。
$ sudo dnf インストール tcpdump
Tcpdump コマンドを使用してパケットをキャプチャする方法
tcpdump でパケットをキャプチャするには、「Ctrl+Alt+t」を使用して sudo 権限でターミナルを起動します。このツールには、TCP/IP パケットをキャプチャするためのさまざまなオプションとフィルターが含まれています。現在またはデフォルトのネットワーク インターフェイスのすべてのフロー パケットをキャプチャする場合は、オプションを指定せずに「tcpdump」コマンドを使用します。
$ sudo tcpdump
指定されたコマンドは、システムのデフォルトのネットワーク インターフェイスのパケットをキャプチャします。
このコマンドの実行の最後に、キャプチャされフィルタリングされたすべてのパケット数が端末に表示されます。
出力を理解しましょう。
Tcpdump を使用すると、TCP/IP パケット ヘッダーの分析が可能になります。各パケットが 1 行で表示され、「Ctrl+C」を押して停止するまでコマンドは実行を続けます。
tcpdump によって提供される各行には、次の詳細が含まれます。
- Unix タイムスタンプ (例: 02:28:57.839523)
- プロトコル(IP)
- 送信元のホスト名または IP とポート番号
- 宛先のホスト名またはIPおよびポート番号
- S (SYN)、F (FIN) などの値で接続状態を示す TCP フラグ (Flags [F.] など)。 (ACK)、P(プッシュ)、R(RST)
- パケット内のデータのシーケンス番号 (例: seq 5829:6820)
- 確認応答番号 (例: ack 1016)
- 受信バッファ内の利用可能なバイトを表すウィンドウ サイズ (例: win 65535)、その後に TCP オプションが続きます
- データペイロードの長さ (例: 長さ 991)
システムのネットワーク インターフェイスのリストをすべてリストするには、「-D」オプションを指定して「tcpdump」コマンドを使用します。
$ sudo tcpdump -Dまたは
$ tcpdump --list-interfacesこのコマンドは、Linux システム上で接続または実行されているすべてのネットワーク インターフェイスを一覧表示します。
指定したネットワークインターフェイスのパケットをキャプチャします
特定のインターフェイスを通過する TCP/IP パケットをキャプチャする場合は、「tcpdump」コマンドで「-i」フラグを使用し、ネットワーク インターフェイス名を指定します。
$ sudo tcpdump -i lo
指定されたコマンドは、「lo」インターフェイスでトラフィックをキャプチャします。パケットに関する詳細な情報を表示したい場合は、「-v」フラグを使用します。より包括的な詳細を出力するには、「tcpdump」コマンドで「-vv」フラグを使用します。定期的な使用と分析は、堅牢で安全なネットワーク環境の維持に貢献します。
同様に、次のコマンドを使用して、任意のインターフェイスでトラフィックをキャプチャできます。
$ sudo tcpdump -i 任意
特定のポートを使用してパケットをキャプチャする
インターフェイス名とポート番号を指定することで、パケットをキャプチャしてフィルタリングできます。たとえば、ポート 22 を使用して「enp0s3」インターフェイスを通過するネットワーク パケットをキャプチャするには、次のコマンドを使用します。
$ tcpdump -i enp0s3 ポート 22前のコマンドは、「enp0s3」インターフェイスから流れるすべてのパケットをキャプチャします。
Tcpdump で限られたパケットをキャプチャする
「tcpdump」コマンドで「-c」フラグを使用すると、指定した数のパケットをキャプチャできます。たとえば、「enp0s3」インターフェイスで 4 つのパケットをキャプチャするには、次のコマンドを使用します。
$ tcpdump -i enp0s3 -c 4
お使いのシステムを使用してインターフェース名を置き換えてください。
ネットワーク トラフィックをキャプチャするための便利な Tcpdump コマンド
以下に、ネットワーク トラフィックやパケットを効率的にキャプチャおよびフィルタリングするのに役立ついくつかの便利な「tcpdump」コマンドをリストしました。
「tcpdump」コマンドを使用すると、宛先 IP または送信元 IP が定義されたインターフェイスのパケットをキャプチャできます。
$ tcpdump -i {インターフェイス名} dst {宛先 IP}デフォルト サイズの 262144 バイトとは異なる 65535 バイトのスナップショット サイズでパケットをキャプチャできます。 tcpdump の古いバージョンでは、キャプチャ サイズは 68 バイトまたは 96 バイトに制限されていました。
$ tcpdump -i enp0s3 -s 65535
キャプチャしたパケットをファイルに保存する方法
さらに分析するために、キャプチャしたデータをファイルに保存することができます。指定されたインターフェイスでトラフィックをキャプチャし、それを「.pcap」ファイルに保存します。次のコマンドを使用して、キャプチャしたデータをファイルに保存します。
$ tcpdump -i <インターフェース名> -s 65535 -w <ファイル名>.pcapたとえば、「enps03」インターフェイスがあります。このキャプチャしたデータを次のファイルに保存します。
$ sudo tcpdump -i enps03 -w dump.pcap将来的には、Wireshark または他のネットワーク分析ツールを使用して、このキャプチャされたファイルを読み取ることができます。したがって、Wireshark を使用してパケットを分析する場合は、「-w」引数を使用して「.pcap」ファイルに保存します。
結論
このチュートリアルでは、さまざまな例を使用して、tcpdump を使用してパケットをキャプチャして分析する方法を説明しました。また、キャプチャされたトラフィックを「.pcap」ファイルに保存する方法も学習しました。このファイルは、Wireshark やその他のネットワーク分析ツールを使用して表示および分析できます。