前回の記事「tcpdumpを使用したトラブルシューティング」では、tcpdump
を確認しました。 ツール、いくつかの基本的なユースケース、および実際のシナリオのモックアップについて説明しました。さて、もう少し掘り下げたいと思います。実際の状況でこのツールを使用する人は誰でも、ユーザーに提示される情報の量(これを「冗長」と呼んでいると思います...)にすぐに気付きます。自分でできる最善のことの1つは、必要な情報をフィルタリングするための実用的な方法を見つけることです。これを行うことができるいくつかの方法を見てみましょう。
一般的なフィルタリングオプション
tcpdump
ツールには、キャプチャ自体をフィルタリングするためのいくつかの異なる組み込みの方法があります。これは、キャプチャが開始される前に受信する情報を絞り込むことができることを意味します。これは非常に望ましい方法であり、キャプチャ後のフィルタリングをはるかに面倒なプロセスにしません。使用できるプレキャプチャフィルターの一部は次のとおりです。
IPアドレスでフィルタリングするには:
$ sudo tcpdump host x.x.x.x
インターフェースでフィルタリングするには:
$ sudo tcpdump -i eth0
ソースでフィルタリングするには:
$ sudo tcpdump src x.x.x.x
宛先でフィルタリングするには:
$ sudo tcpdump dst x.x.x.x
プロトコルでフィルタリングするには:
$ sudo tcpdump icmp
このリストは、利用可能な各オプションを網羅していませんが、良い出発点を提供します。次に、キャプチャを操作する他の方法をいくつか見てみましょう。
キャプチャをファイル(pcap)に書き込む
トラブルシューティングの性質上、tcpdump
でキャプチャしたときに表示される内容を文書化すると便利です。 。幸い、tcpdump
表示されるすべてのデータをキャプチャする出力ファイル形式があります。この形式はパケットキャプチャと呼ばれます ファイル、別名PCAPであり、ネットワークアナライザやtcpdump
などのさまざまなユーティリティで使用されます。 。ここでは、 output_fileというPACAPファイルに書き込んでいます。 -w
を使用する スイッチ。
[root@server ~]# tcpdump -i enp0s8 -c100 -nn -w output_file
tcpdump: listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
100 packets captured
102 packets received by filter
0 packets dropped by kernel
pcapファイルの読み取り
-r
を使用してPCAPファイルを読み取ることができます スイッチ。従来の方法(cat
)でPCAPファイルを読み取ろうとした場合は注意が必要です 、Vimなど)、読み取り不可能なジブリッシュを受け取ります。これらのプログラムを使用して出力を表示する場合は、読み続けてください。
$ tcpdump -r output_file
tcpdumpを.txtに書き込む
従来の方法を使用して出力ファイルを読み取る場合は、tcpdump
を再実行する必要があります。 、-w
を除く 国旗。以下に、ファイル名が output.txtの標準出力からファイル形式を使用していることがわかります。 。
[root@server ~]# tcpdump -i enp0s8 -c100 -nn > output.txt
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes
100 packets captured
102 packets received by filter
0 packets dropped by kernel
例
先に進む前に、この記事の残りの部分で設定したシナリオについて説明したいと思います。同じネットワーク上で3つのVMが実行されています。クライアント1とクライアント2の両方がサーバーにノンストップでpingを実行します。インターフェイスenp0s8でICMPトラフィックをキャプチャします サーバーVMで、各クライアントマシンからのパケットをフィルタリングします。これはかなり単純な演習であると思いますが、原則はより複雑な実世界の環境に適用できます。
- サーバー-172.25.1.5
- クライアント1-172.25.1.4
- クライアント2-172.25.1.7
次に、キャプチャの生成に使用される2つのコマンドを確認します。
- PCAPファイルへの書き込み-
tcpdump -i enp0s8 -c100 -nn -w output_file
- TXTファイルへの書き込み-
tcpdump -i enp0s8 -c100 -nn > output.txt
ここでの唯一の顕著な違いは、出力形式です。インターフェースenp0s8でトラフィックをキャプチャしたことがわかります また、キャプチャを名前やポートの解決なしで100パケットに制限しました。それでは、ファイルをクライアント1からのトラフィックのみにフィルタリングしてみましょう。
これを行うには、2つのコマンド文字列のいずれかを使用します(キャプチャのファイル形式によって異なります):
PCAP出力のフィルター-tcpdump -r output_file | grep -i 172.25.1.4
[root@server ~]# tcpdump -r output_file | grep -i 172.25.1.4
reading from file output_file, link-type EN10MB (Ethernet)
22:01:14.947643 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 109, length 64
22:01:14.947704 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 109, length 64
22:01:16.023097 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 110, length 64
22:01:16.023153 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 110, length 64
22:01:17.081338 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 111, length 64
22:01:17.081386 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 111, length 64
22:01:18.103740 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 112, length 64
22:01:18.103784 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 112, length 64
22:01:19.128568 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 113, length 64
22:01:19.128646 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 113, length 64
22:01:20.129531 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 114, length 64
22:01:20.129577 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 114, length 64
22:01:21.175573 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 115, length 64
22:01:21.175631 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 115, length 64
22:01:22.199852 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 116, length 64
22:01:22.199899 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 116, length 64
22:01:23.231032 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 117, length 64
22:01:23.231083 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 117, length 64
22:01:24.247585 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 118, length 64
22:01:24.247660 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 118, length 64
22:01:25.248875 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 119, length 64
22:01:25.248937 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 119, length 64
22:01:26.295889 IP 172.25.1.4 > server.example.com: ICMP echo request, id 1, seq 120, length 64
22:01:26.295946 IP server.example.com > 172.25.1.4: ICMP echo reply, id 1, seq 120, length 64
22:01:27.255274 ARP, Request who-has server.example.com tell 172.25.1.4, length 46
*Edited for length*
または
TXT出力のフィルター-cat output.txt | grep -i 172.25.1.4
[root@server ~]# cat output.txt | grep -i 172.25.1.4
12:03:56.653494 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 342, length 64
12:03:56.653534 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 342, length 64
12:03:57.674036 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 343, length 64
12:03:57.674089 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 343, length 64
12:03:58.701049 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 344, length 64
12:03:58.701107 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 344, length 64
12:03:59.721996 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 345, length 64
12:03:59.722134 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 345, length 64
12:04:00.746748 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 346, length 64
12:04:00.746805 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 346, length 64
12:04:01.774055 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 347, length 64
12:04:01.774130 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 347, length 64
12:04:02.793968 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 348, length 64
12:04:02.794012 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 348, length 64
12:04:03.846026 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 349, length 64
12:04:03.846082 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 349, length 64
12:04:04.918800 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 350, length 64
12:04:04.918850 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 350, length 64
12:04:05.930499 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 351, length 64
12:04:05.930543 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 351, length 64
12:04:06.954222 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 352, length 64
12:04:06.954269 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 352, length 64
12:04:07.990890 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 353, length 64
12:04:07.990937 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 353, length 64
12:04:09.002781 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 354, length 64
12:04:09.002842 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 354, length 64
12:04:10.032385 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 355, length 64
12:04:10.032451 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 355, length 64
12:04:11.055533 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 356, length 64
12:04:11.055583 IP 172.25.1.5 > 172.25.1.4: ICMP echo reply, id 1, seq 356, length 64
12:04:12.074288 IP 172.25.1.4 > 172.25.1.5: ICMP echo request, id 1, seq 357, length 64
*Edited for length*
クライアント2との間のトラフィックを確認するには、grep
のIPアドレスを変更するだけです。 クエリ。この方法は、ホスト名、ポート番号、およびキャプチャファイルにあるその他のキーワードに対して機能します。この特定の例は、プレフィルタリングとポストフィルタリングの能力を示しています。事前フィルタリングは、特定のインターフェースを介してのみキャプチャする場合に発生し、事後フィルタリングは、grep
を適用する場合に発生します。 キャプチャファイルへのクエリ。
お持ち帰り
私が伝えたいのは、そのtcpdump
信じられないほど強力なツールです。それでも、強力なテクノロジーには、特定のニーズに当てはまらない可能性のある情報がたくさんあります。いくつかの考えと計画を立てれば、キャプチャを事前にフィルタリングしてキャプチャされるトラフィックの量を絞り込み、スマートなgrep
を使用できます。 またはawk
出力ファイルをクエリして、探しているトラフィックの相互作用をすばやく見つけます。これらの戦略を正しく適用すると、トラブルシューティングの作業を飛躍的に迅速化できます。さて、これをすぐに練習する必要がないことを願っています。
[この無料の電子書籍を使用して、ネットワークツールキットに自動化を追加する方法を学びます。 ]