tcpdumpは、データネットワークパケットアナライザのコンピュータプログラムです。これにより、ユーザーはネットワークを介して送受信されているネットワークパケット(TCP / IPを含む)を表示できます。この短い記事では、tcpdumpを使用してネットワークトラフィック分析のためにパケットキャプチャを実行する方法を示します。
ネットワークインターフェースの一覧表示
Tcpdumpはネットワークカードにアクセスする必要があるため、rootとして次のコマンドを実行します( su を使用) またはsudo )。システムで使用可能で、tcpdumpがパケットをキャプチャできるネットワークインターフェイスのリストを印刷するには、実行します
# tcpdump -D

私の場合、「実際の」nic、enp3s0を使用します。
パケットのキャプチャ
Webブラウザを開いて(ネットワークトラフィックを生成するためだけに)、次のコマンドを実行します。
# tcpdump -i <interface>

サイトを開かなくても、ネットワークアクティビティが表示される場合があります。たぶん、その「いくつか」は多くのネットワーク活動を意味します。 ctrl-cで終了し、結果を確認します。出力には、次の情報を含む1行あたりのパケットが表示されます。
- タイムスタンプ
- プロトコル(IPv6の場合はIP6、IPv4の場合はIP)
- オリジンホスト(IPまたはホスト名)とポート
- 宛先ホスト(IPまたはホスト名も)とポート
- TCPフラグ
- シーケンス番号
- ACK番号
- ウィンドウサイズ
- TCPオプション
- データの長さ
出力の制限
tcpdump -i <interface> -c <n>
このコマンドを使用すると、プログラムは nを受信した後に終了します。 パケット

スクリーンショットでは、 sleep 2を見ることができます。 tcpdumpの前に実行されているコマンド。これは、ブラウザにウィキペディアをロードするのに2秒かかるだけでした。ただし、これは以前と同じタイプの出力です。
名前を非表示にする
tcpdump -i <interface> -n
-nスイッチを使用すると、tcpdumpはIPアドレスまたはポート番号を名前に変換しません。

フィルター
特定のパケットのみをキャプチャするようにtcpdumpに指示できます。たとえば、httpsパケットのみ、より正確にはポート443へのパケットをキャプチャするには、次の式を追加します。
tcpdump -i <interface> port <portnumber or portname>

次の式を使用して、あるホストとの間でパケットをキャプチャすることもできます
tcpdump -i <interface> host <ip address or hostname>
または、次の方法でプロトコルのパケットをキャプチャできます:
tcpdump -i <interface> proto <protocol>
プロトコルは、icmp、icmp6、igmp、igrp、pim、ah、esp、vrrp、udp、またはtcpのいずれかになります。 icmp、tcp、およびudpの場合、キーワードprotoを省略できます。
複数の式を「and」(または「&&」)、「or」(または「||」)、not(または「!」)と組み合わせて、括弧でグループ化することもできます。作成できるフィルターは他にもたくさんあります。pcap-filterのマンページ( man pcap-filter )を確認してください。 )構文のヘルプを取得します。
出力の詳細度を上げる
-vパラメーターを使用して、冗長性を高めます。 tcpdumpのマンページから:
-v 解析および印刷するときは、(少し多くの)詳細な出力を生成します。たとえば、IPパケットの存続時間、ID、全長、およびオプションが印刷されます。また、IPおよびICMPヘッダーチェックサムの検証など、追加のパケット整合性チェックを有効にします。
-vv さらに詳細な出力。たとえば、追加のフィールドはNFS応答パケットから出力され、SMBパケットは完全にデコードされます。
-vvv さらに詳細な出力。たとえば、telnetSB…SEオプションは完全に印刷されます。 -Xを使用すると、Telnetオプションも16進数で出力されます。

キャプチャをファイルに保存
後で分析するためにパケットをファイルに書き込むには、コマンドラインに-wを追加します。
tcpdump -i <interface> -w <filename>

後で-rフラグを使用してそのファイルを読み取ることができます
tcpdump -r <file>

または、wiresharkなどのGUIツールを使用して後でそのファイルを開くことができます。

ちょっと待ってください…wiresharkはネットワークパケットもキャプチャできますが、最初から使用しなかったのはなぜですか。
確かに、wiresharkはパケットをキャプチャでき、出力もはるかに明確で、追跡および読み取りが容易です。 Wiresharkを使用すれば、コマンドラインを覚えたり、マンページ、ブログ記事、または少なくともチートシートを手元に置いたりする必要はありません。また、真実です。 tcpdumpを使用してネットワークトラフィック分析を行うのではなく、wiresharkを使用することもできます。ただし、サーバーやルーターでキャプチャを実行する必要がある場合があります。そのような種類のコンピューターでは、ウィンドウ、色、ボタン、その他のGUIウィジェットの描画で貴重なCPUサイクルやメモリビットを無駄にしたくありません。
そのため、急いでいる場合は、コマンドラインでtcpdumpを使用してネットワークトラフィック分析を行うことにしました。または、wiresharkで転送するために転送するファイルに出力を保存します。