GNU/Linux >> Linux の 問題 >  >> Linux

Linuxのtcpdumpコマンド

tcpdump は、システムを通過するネットワークトラフィックをキャプチャして分析できるコマンドラインユーティリティです。フィルタリングオプションに応じて、このツールを使用して、あらゆる種類のネットワーク問題のトラブルシューティングを効果的に行うことができます。これは、これらの機能のためにシステム管理者エンジニアによって非常に一般的に使用されるツールです。

このチュートリアルでは、 tcpdumpを使用するいくつかの方法を分析します。 、 すべてではありません。これは、このコマンドに含まれるフィルタリングオプションが多すぎるため、すべてを網羅することはできません。ここでは、一般的に使用されるオプションの一部のみを見ていきます。残りはmanページにあります。

tcpdumpコマンドのインストール

システムにtcpdumpがあるかどうかを確認できます コマンド、入力して

tcpdump --version

出力にインストールされていないことが示されている場合は、システムのパッケージマネージャーを使用して直接取得できます。

:パケットをキャプチャするため、昇格されたアクセス許可が必要です。 ( sudo 必要とされている)。すべてのtcpdumpのプレフィックスを付けます sudoを使用したコマンド 結果として。

パケットキャプチャのインターフェイスを一覧表示する

パケットをアクティブにキャプチャする前に、tcpdumpで使用可能なインターフェイスを確認します。 。

-Dを使用してインターフェースを一覧表示できます (表示)オプション。

sudo tcpdump -D

マシンで使用可能なすべてのインターフェースのリストが表示されます。これはシステムごとに異なるため、私の場合は Dockerなどの他のインターフェースがいくつかあります。 、Dockerサービスが実行されているため、通常のネットワークインターフェイスは別として。

特別なインターフェース任意 任意のでキャプチャできます アクティブなインターフェース。

マシンで使用可能なインターフェースがわかったので、パケットのキャプチャを開始しましょう!

tcpdumpを使用してパケットをキャプチャする

任意のすべてのパケットをキャプチャします 次のコマンドを実行してインターフェースを設定します:

sudo tcpdump -i any

これにより、インターフェースが任意に指定されます 、前述の特別なインターフェース。

tcpdump 割り込みを受信するまでパケットをキャプチャし続けます 信号。 Ctrl+Cを押すと、キャプチャを中断できます 。

出力には、tcpdumpを終了するための割り込み信号が受信されるまでのすべてのパケットキャプチャが一覧表示されます。 。

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:49:32.841984 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132693749:4132693857, ack 3344962610, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 108
10:49:32.842057 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36
10:49:32.842101 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 144:260, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 116
10:49:32.842135 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 260:296, ack 1, win 1002, options [nop,nop,TS val 135269404 ecr 1623818400], length 36
...
...
^C
264 packets captured
361 packets received by filter
91 packets dropped by kernel

ご覧のとおり、tcpdump 264パケットをキャプチャしました。たとえば、sshを使用してこのサーバーに接続しているため 、 tcpdump これらすべてのパケットをキャプチャしました。

パケットキャプチャの数を制限する

キャプチャされるパケットの数を制限し、tcpdumpを停止するには 、-cを使用します (キャプチャ制限)オプション:

sudo tcpdump -i any -c 2

これにより、tcpdumpコマンドは2パケット後に自動的にキャプチャを停止します。この場合、割り込み信号を使用して手動で終了する必要はありません。

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
10:57:31.284198 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 4132754245:4132754353, ack 3344963698, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 108
10:57:31.284275 IP 111.11.111.11.vultr.com.ssh > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135747845 ecr 1624296856], length 36
2 packets captured
16 packets received by filter
8 packets dropped by kernel

このオプションは、ネットワークに問題がある場合に、問題のトラブルシューティングのためにネットワーク接続を監視するのに非常に役立ちます。

名前とポートの解決を無効にする

デフォルトでは、 tcpdump コマンドは、IPアドレスとポートを名前( vultr.com.ssh など)に解決します 、IPアドレスとポートからの名前解決を行います。

ネットワークの問題をトラブルシューティングするときは、多くの場合、IPアドレスとポート番号を使用する方が簡単です。オプション-nを使用して、名前解決を無効にできます -nnを使用したポート解決 。

sudo tcpdump -i any -c 2 -nn

上記のコマンドは、ポート解決を無効にしながら、任意のインターフェイスで2つのパケットをキャプチャします。

そのため、出力は名前解決を停止し、IPアドレスとポート番号を返すだけです。

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108
11:00:36.459982 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 108:144, ack 1, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 36
2 packets captured
8 packets received by filter
0 packets dropped by kernel

ここで、出力の行を調べてみましょう。

11:00:36.459922 IP 111.11.111.11.22 > 123.45.678.90.48006: Flags [P.], seq 4132755513:4132755621, ack 3344963838, win 1002, options [nop,nop,TS val 135933020 ecr 1624482048], length 108

これは典型的なTCP パケットキャプチャ。他のプロトコルパケットとフォーマットは、tcpdumpコマンドのマニュアルページで参照できます。

最初のフィールド、 11:00:36.459922 、ローカルクロックに従って受信したパケットのタイムスタンプを表します。

次に、IP ネットワーク層プロトコルを表します。この場合、IPv4IPv6の場合 パケットの場合、値はIP6です。 。

次のフィールド、 111.11.111.11.22 、は送信元IPアドレスとポートです。この後に、 123.45.678.90.48006で表される宛先IPアドレスとポートが続きます。 。

基本的な出力形式がわかったので、tcpdumpのいくつかのフィルタリングオプションを分析してみましょう。

パケットのフィルタリング

tcpdumpの1つ コマンドの最も強力な機能は、フィルタリングする機能です。 送信元と宛先のIPアドレス、ポート、プロトコルなど、さまざまなパラメータを使用してキャプチャされたパケット。最も一般的なものをいくつか見てみましょう。

プロトコルに基づくフィルター

プロトコルに基づいてパケットをフィルタリングするには、コマンドでプロトコルを指定する必要があります。

ICMPをキャプチャするには パケットのみ、 ICMPに基づいてフィルタリングできます プロトコル。

sudo tcpdump -i any -c 5 icmp

ping以降 コマンドはICMPを使用します パケット、pingによる着信パケットを分析できます 別のマシンから。

現在のマシンにpingを実行し、着信pingパケットをキャプチャしてみましょう。

別のマシンでターミナルセッションを開き、次のように入力します

ping IP_ADDRESS_MACHINE_1

さて、tcpdumpで ターミナルセッションでは、ICMPping応答パケットをキャプチャしていることがわかります。

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
11:18:47.947475 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 1, length 64
11:18:47.947554 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 1, length 64
11:18:48.947669 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 2, length 64
11:18:48.947752 IP 111.11.111.11.vultr.com > 123.45.678.90: ICMP echo reply, id 6068, seq 2, length 64
11:18:49.947853 IP 123.45.678.90 > 111.11.111.11.vultr.com: ICMP echo request, id 6068, seq 3, length 64
5 packets captured
6 packets received by filter
0 packets dropped by kernel

ここで、123.45.678.90はです tcpdumpにpingを送信するマシン(マシン2)のIPアドレス システム、および 111.11.111.11 はパケットフィルタリングマシン(マシン1)のIPアドレスです。

sshを使用していたので ping要求を送信するには、vultr.comへのドメイン解決があります(ただし、名前解決はありません)。 。

ホストに基づくフィルター

キャプチャを特定のホストに関連するパケットのみに制限するには、hostを使用できます フィルタ

sudo tcpdump -i any -c5 -nn host 192.168.1.2

この例では、 tcpdump ホスト192.168.1.2との間のパケットのみをキャプチャして表示します 。

ポートに基づくフィルター

目的のサービスまたはポートに基づいてパケットをフィルタリングするには、portを使用します フィルター。たとえば、このコマンド(port 22 )を使用して、sshセッションに関連するパケットをキャプチャします。 フィルタリング):

sudo tcpdump -i any -c5 -nn port 22

ソースIP/ホスト名に基づくフィルター

送信元または宛先のIPアドレスまたはホスト名に基づいてパケットをフィルタリングすることもできます。たとえば、ホスト192.168.1.2からパケットをキャプチャするには

sudo tcpdump -i any -c 5 -nn src 192.168.1.2

dstを使用できます 宛先IP/ホスト名でもフィルタリングします。

sudo tcpdump -i any -c 5 -nn src 172.168.1.2

パケットキャプチャの保存

パケットキャプチャの結果は、後で分析するためにファイルに保存できます。

パケットを画面に表示する代わりにファイルに保存するには、オプション-wを使用します :

sudo tcpdump -i any -c 5 -nn -w sample.pcap port 22

このコマンドは、出力をsample.pcapという名前のファイルに保存します 。 .pcap 拡張子は「パケットキャプチャ」の略で、このファイル形式の規則です。

結論

このチュートリアルでは、tcpdumpを使用して、さまざまなオプションに基づいてパケットのキャプチャとフィルタリングを実行する方法を学習しました。 コマンド。


Linux
  1. Linuxmvコマンド

  2. Linuxduコマンド

  3. Linuxipコマンド

  1. Linuxでtcpdumpコマンドを使用してパケットをキャプチャおよび分析する方法

  2. Linuxifconfigコマンド

  3. Linuxcdコマンド

  1. Linuxタイムコマンド

  2. LinuxでのPingコマンド

  3. Linuxウォッチコマンド