tcpdumpがネットワークトラフィックをキャプチャし、システムのチェックアウトするために使用することができ、コマンドラインユーティリティです。これは、ネットワーク管理者のトラブルシューティングネットワークの問題やセキュリティテストのための最も一般的なツールです。
この名前が、tcpdumpのを使用して、あなたはまた、UDP、ARPやICMPなどの非TCPトラフィックをキャプチャすることができます。パケットをキャプチャするか、標準出力ファイルを書き込むことができます。最も強力な機能のtcpdumpコマンドの一つが分析したいデータのみを使用フィルタとキャプチャする能力です。
この記事では、我々は、Linuxでのtcpdumpコマンドを使用する方法の基本をカバーします。
インストールのtcpdump
ほとんどのLinuxディストリビューションおよびMacOSで、デフォルトのtcpdumpでインストールされています。tcpdumpのコマンドを確認するには、あなたのシステムで提供されています:
出力は次のようにする必要があります:
tcpdumpのバージョン4.9.2
のlibpcapバージョン1.8.1
のOpenSSL 1.1.1 2018年9月11日
お使いのシステム上でtcpdumpのない場合は、上記のコマンドは、「そのようなファイルやディレクトリを。」と表示されません あなたは、ディストリビューションのパッケージマネージャ簡単なインストールのtcpdumpを使用することができます。
$須藤はapt更新&&のtcpdumpをインストール須藤はapt
$ sudoのyumのは、tcpdumpのインストール
tcpdumpがアーチのLinuxにインストール
$ sudoのパックマン-S tcpdumpを
tcpdumpのでキャプチャするパケット
次のようにtcpdumpコマンドの一般的な構文は次のとおりです。
tcpdumpの[オプション]、[フィルタ式]
- コマンドオプションを使用すると、コマンドの動作を制御することができます。
- フィルタ式は、パケットをキャプチャするかを定義します。
rootユーザーまたはtcpdumpを実行するためにsudo権限を持っているだけです。あなたは非特権ユーザとしてコマンドを実行しようとすると、エラーメッセージが表示されます:「あなたは、デバイス上で撮影する権利はありません。」
tcpdumpの:ens33:あなたは、そのデバイス上でキャプチャする権限がありません
(ソケット:動作許可されていません)
最も単純なユースケースの場合は、オプションなしで、通話はtcpdumpのフィルタ:
次のように出力されます。
tcpdumpが、それは、割り込み信号が出力されている受信するまでパケットをキャプチャし、標準出力に書き込まれていきます。Ctrlキー+ Cキーがブレーク信号と停止コマンドを送信するために使用されます。
より詳細な出力を取得するには、-vオプションを渡し、または出力VERBOSE以上取得する-vv渡します。
あなたは、キャプチャするパケットの数を指定するには、-cオプションを使用することができます。例えば、わずか5パケットをキャプチャするために入力します。
パケットをキャプチャした後、tcpdumpが停止します。
あなたはtcpdumpのを使用して、任意のインターフェイス、最初のインターフェイスを指定して、ダンプしていない場合は、インターフェイスを介してすべてのデータパケットを検出します。
tcpdumpのは、利用可能なすべてのネットワーク・インタフェースのデータパケットのリストを収集することができます印刷するには、-Dオプションを使用します。
各インターフェイスには、このコマンドは、インタフェース名、簡単な説明と関連インデックス(番号)を印刷します。
输出:
1.ens33 [上、ランニング]
2.any(疑似デバイスそのすべてのインターフェイス上のキャプチャ)[上、ランニング]
3.lo [上、実行して、ループバック]
4.bluetooth0(ブルートゥースアダプタ番号0)
5.nflog (のLinux netfilterのログ(NFLOG)インタフェース)
6.nfqueue(Linuxのnetfilterのキュー(NFQUEUE)インタフェース)
7.usbmon1(USBバス番号1)
8.usbmon2(USBバス番号2)
第一インタフェース表示ens3用のtcpdumpの上記出力は、コマンドのためのインターフェイスを提供せずに発見し、使用されています。二つ目は、あなたがすべての活動のためのインターフェイスをキャプチャすることができます任意のデバイスに特別なインタフェースです。
、あなたはトラフィックインターフェイスをキャプチャしたい指定コマンドを呼び出すために-iオプションを使用して、インターフェイス名またはインデックスが続くにリンクされています。例えば、すべてのインターフェイスからのすべてのパケットをキャプチャするために、インターフェイスは、任意に指定することができます。
デフォルトでは、名前にIPアドレスとポート番号の逆引きDNS解決を実行するためにtcpdumpの。変換を無効にするには、-nオプションを使用します。
DNSルックアップが避けDNSトラフィックを生成して出力より読みにスキップされます。tcpdumpのを呼び出すときにこのオプションが推奨されます。
そして、あなたはリダイレクト演算子を使用することができ、画面上の異なる出力を表示する>と>>ファイルにリダイレクトします。
また、同時にファイルに保存されたデータを表示しteeコマンドを使用することができます。
上記のコマンドの-lオプションは、tcpdumpの出力バッファラインに指示します。このオプションは、新しい行を生成するために使用されていない場合は、出力は画面に書かれていません。
tcpdumpの出力を学びます
新しいライン上に捕捉された各パケットのためのtcpdump出力。各ラインは、プロトコルに応じて、データパケットに関連するタイムスタンプ情報を含みます。
次のように一般的なTCPプロトコル形式ラインです。
[タイムスタンプ] [プロトコル] [SrcのIP] [Srcのポート]> [DstのIP] [Dstのポート]:[フラグ]、[配列]、[Ackを]、[勝利サイズ]、[オプション]、[データ長]
各フィールドで見てみましょうについて説明し、次のように説明します。
21:53:20.460144 IP 192.168.182.166.57494> 35.222.85.5.80:フラグ[P.]、配列1:88、ACK 1、勝つ29200、オプション[NOP、NOP、TSヴァル1067794587 ECR 2600218930]、長さ87
- 午後9時53:20.460144 - タイムスタンプはローカルタイムにパケットをキャプチャし、そして次の形式を使用:時:分:seconds.frac、FRAC第二の真夜中画分以降に。
- IP - パケットプロトコル。この場合、IPは、インターネットプロトコルバージョン4(IPv4)の略です。
- 192.168.182.166.57494 - (。)送信元IPアドレスとポートは、ドットで区切られています。
- 35.222.85.5.80 - 宛先IPアドレスおよびポートは、ピリオドで区切られました(。)。
TCPフラグフィールド。この例では、[P.]は、データを確認し、送信する前にパケットのためのプッシュ確認応答パケットを示します。次のように他の典型的なフラグフィールドの値は以下のとおりです。
- [。] - ACK(確認応答)
- [S] - SYN(START接続)
- [P] - PSH(データをプッシュ)
- [F] - FIN(終了接続)
- [R] - RST(リセット接続)
- [S.] - SYN-ACK(SYNACKパケット)
- 配列1:88 - 最初の配列番号:最後に表記。これは、パケットに含まれるデータの数を示します。(数字は絶対的である)第1のデータストリームをパケットに加えて、後続のすべてのパケットが相対バイト位置として使用されます。この例では、数は1八十から八は、このパケットは、バイトストリームが1-88で含まれていることを示しています。絶対シーケンス番号を印刷するには、-sオプション。
- ACK 1 - 確認応答番号(確認応答番号)この次の期待シーケンス番号のデータの他端に接続されています。
- 29200勝つ - ウィンドウ番号は受信バッファに使用可能なバイト数です。
- オプション[NOP、NOP、TSヴァル1067794587 ECR 2600218930] - TCPオプション。4バイトの倍数充填TCPヘッダにNOPまたは「ノーオペレーション」を使用。TS ValでTCPタイムスタンプ、ECRは、エコー応答を表しています。TCPオプションの詳細については、訪問IANAのマニュアルを参照してください。
- 長さ87 - ペイロードデータの長さ
tcpdumpのフィルタ
tcpdumpのを呼び出すフィルタなしの場合には、それはすべてのトラフィックをキャプチャし、発見し、ターゲット・データ・パケットを解析しますが非常に困難になる大量の出力を生成します。
tcpdumpコマンドフィルタは、最も強力な機能の一つです。彼らはあなたが式に一致するパケットのみをキャプチャすることができますので。たとえば、とき、Webサーバーのトラブルシューティングに関連する問題は、HTTPトラフィックのみを取得するためにフィルタを使用することができます。
バークレーパケットフィルタを使用して、tcpdumpの(BPF)構文キャプチャされたパケットをフィルタリングする(等プロトコル、送信元IPアドレスと宛先IPアドレスとポートなど)様々な処理パラメータ。
この記事では、我々は、最も一般的なフィルタの一部をご紹介します。すべての使用可能なフィルタのリストについては、PCAPフィルタのオンラインヘルプページを参照してください。
合意によるフィルタ
特定のプロトコルに限定されるもので捕捉するために、プロトコルはフィルタとして指定されています。たとえば、唯一のUDPトラフィックをキャプチャするために、あなたが使用することができます。
$ sudoをtcpdumpの-n UDP
別の方法は、プロトタイプ定義されたプロトコルの修飾子を使用することで、プロトコル番号が続きます。次のコマンドプロトコル番号17をフィルタリングし、上記と同じ結果を生成します。
$ sudoをtcpdumpの-nプロト17
製品コードの詳細については、IPプロトコル番号のリストを確認してください。
ホステッドフィルタリング
のみ、特定のホスト・データ・パケットに関連付けられているをキャプチャするには、ホスト修飾子を使用します。
$ sudoをtcpdumpの-nホスト192.168.1.185
ホストは、IPアドレスまたは名前を指定できます。
また、特定のIP範囲にネットワーク修飾子出力フィルタを使用することができます。たとえば、唯一のダンプに10.10.0.0/16関連するパケットを使用することができます。
10.10 $ sudoをtcpdumpの-nネット
ポートフィルタリングにより、
のみ、特定のポートまたは特定のポート、使用ポート修飾子に限らからのパケットをキャプチャします。次のコマンドは、SSH(ポート22)サービスに関連するデータ・パケットをキャプチャするには、次のコマンドを使用します。
$ sudoをtcpdumpの-nポート23
ポート範囲修飾子は、ポートのトラフィックのシリーズをキャプチャすることができます:
$ sudoをtcpdumpの-nポート範囲110-150
出発地と目的地によってフィルター
あなたも使用することができますが、SRC、DST、srcとdstのとSRCまたはDST修飾子ソースまたは宛先ポートまたはホストベースのパケットフィルタリングです。
ホスト192.168.1.185からのIPパケットを着信次のコマンドキャプチャーです:
$ sudoをtcpdumpの-n SRCホスト192.168.1.185
ポート80への任意のソースからのトラフィックを検索するには、以下を使用します。
$ sudoをtcpdumpの-n DSTポート80
複雑なフィルタ
そして、使用(&&)や(||)ではなく(!)演算子はフィルタを組み合わせることができます。
例えば、送信元IPアドレス192.168.1.185からのすべてのHTTPトラフィックをキャプチャするために、次のコマンドを使用します。
$ sudoをtcpdumpの-n SRC 192.168.1.185とTCPポート80
また、グループに括弧を使用して、より複雑なフィルタを作成することができます。
$ sudoをtcpdumpの-n 'ホスト192.168.1.185と(TCPポート80またはTCPポート443)'
特殊文字を使用するときにエラーを解析避けるために、単一引用符で囲まれたフィルタを含みます。
これは、コマンド、SSHからキャプチャ192.168.1.185以外のすべてのトラフィックの送信元IPアドレスの別の例であります:
$ sudoをtcpdumpの-n SRC 192.168.1.185はなく、DSTポート22
パケットをチェック
デフォルトでは、tcpdumpをキャプチャパケットヘッダのみ。しかし、時にはあなたは、パケットの内容を確認する必要があるかもしれません。
tcpdumpのは、あなたがASCIIと16進形式で、パケットの内容を印刷することができます。
-Aオプションは、各データパケットの進形式-x出力にASCII形式で各データパケットのtcpdumpの出力を伝えます。
$ sudoをtcpdumpの-n -A
16進数とASCIIコードでパケットの内容を表示するには、-Xオプションを使用します。
$ sudoをtcpdumpの-n -X
ファイルの取り込みに読み取りおよび書き込み
パケットのtcpdumpの他の有用な機能は、ファイルに書き込まれます。あなたは、データパケットまたはデータパケットの多くをキャプチャするときに非常に便利です後で分析のために捕獲されます。
、ファイルへの書き込みを開始-wオプションを使用するには、キャプチャ出力ファイルが続きます。
$ sudoをtcpdumpの-n -w data.pcap
上記のコマンドはでキャプチャdata.pcapという名前のファイルに内容を保存します。あなたは、必要に応じてファイルに名前を付けますが、名前の.pcap拡張(パケットキャプチャ)を使用すると、一般的な慣例であることができます。
-wオプションを使用すると、出力は画面には表示されません。tcpdumpのは、生データパケットを書いて、バイナリファイルを作成し、通常のテキストエディタはファイルを読み取ることができません。
ファイルの内容を確認するには、tcpdumpを起動するために-rオプションを使用します。
$ sudoをtcpdumpの-r data.pcap
あなたが背景のtcpdumpで実行したい場合は、コマンドのアンパサンド(&)の最後に追加します。
また、他のパケットアナライザツール(例えば、Wiresharkの)チェックキャプチャファイルを使用することができます。
パケットをキャプチャするのに長い時間のために、あなたはファイルのローテーションを有効にすることができます。tcpdumpのは、新しいファイルを作成したり、指定した時間間隔または固定サイズの回転式ダンプファイルにすることができます。古いファイルを上書きする前に、次のコマンドは、10 200メガバイトのファイルはfile.pcap0、file.pcap1、というように命名されているまで作成されます。
$ sudoをtcpdumpの-n -W 5 -C 200 -w /tmp/file.pcap
5つのファイルを生成した後、古いファイルが上書きされます。
あなただけのトラブルシューティング時にtcpdumpを実行する必要があることをしてくださいノート。
あなたが特定の時間にtcpdumpを開始したい場合は、cronジョブを使用することができます。tcpdumpが指定した時間後に終了するオプションはありません。あなたは、一定期間後にtcpdumpコマンドのタイムアウトを使用して停止することができます。例えば、1分後に終了するには、あなたが使用することができます。
$ sudoのタイムアウト60のtcpdump -n -w data.pcap
概要
tcpdumpコマンドは、ネットワーク関連の問題ラインツールを分析し、解決するために使用されます。
この記事では、基本的なtcpdumpの用法と構文を紹介します。より詳細なドキュメント、訪問tcpdumpのウェブサイトのため。
ご質問やフィードバックがありましたら、コメントにお気軽にどうぞ。