ウェブサイト検索

TCPflow - Linux でのネットワーク トラフィックの分析とデバッグ


TCPflow は、Linux などの Unix 系システム上のネットワーク トラフィックを分析するための、無料のオープン ソースの強力なコマンド ライン ベースのツールです。 TCP 接続を介して受信または転送されたデータをキャプチャし、後で分析できるように、プロトコル分析とデバッグを可能にする便利な形式でファイルに保存します。

こちらもお読みください: Linux のネットワーク使用状況を分析するための 16 の最適な帯域幅監視ツール

これは実際には、ネットワークまたは保存されたファイルからのパケットを処理するための tcpdump のようなツールです。これは、対応するものと同じ強力なフィルタリング式をサポートします。唯一の違いは、tcpflow がすべての TCP パケットを順序付けし、後で分析できるように各フローを別個のファイル (フローの各方向のファイル) にまとめることです。

その機能セットには、圧縮された HTTP 接続を解凍したり、MIME エンコードを元に戻したり、後処理などのためにサードパーティ プログラムを呼び出したりするための高度なプラグイン システムが含まれています。

tcpflow には、ネットワーク パケット フローの理解や、ネットワーク フォレンジックの実行や HTTP セッションの内容の漏洩のサポートなど、多くの使用例があります。

Linux システムに TCPflow をインストールする方法

TCPflow は、主流の GNU/Linux ディストリビューションの公式リポジトリで入手でき、示されているようにパッケージ マネージャーを使用してインストールできます。

sudo apt install tcpflow	#Debian/Ubuntu
sudo yum install tcpflow	#CentOS/RHEL
sudo dnf install tcpflow	#Fedora 22+

tcpflow をインストールしたら、スーパーユーザー権限で実行できます。それ以外の場合はsudo コマンドを使用します。アクティブなネットワーク インターフェイス (enp0s3 など) をリッスンすることに注意してください。

sudo tcpflow

tcpflow: listening on enp0s3

デフォルトでは、tcpflow はキャプチャされたすべてのデータを、フォーム内の名前を持つファイルに保存します (タイムスタンプなどの特定のオプションを使用する場合は異なる場合があります)。

sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443

次に、ディレクトリのリストを作成して、tcp フローがファイルにキャプチャされているかどうかを確認してみましょう。

ls -1

total 20
-rw-r--r--. 1 root    root     808 Sep 19 12:49 192.168.043.031.52920-216.058.210.034.00443
-rw-r--r--. 1 root    root      59 Sep 19 12:49 216.058.210.034.00443-192.168.043.031.52920

前述したように、各 TCP フローは独自のファイルに保存されます。上記の出力から、3 つのトランスクリプト ファイルがあることがわかります。これらは、2 つの反対方向の tcpflow を示しています。最初のファイルの送信元 IP と 2 番目のファイルの宛先 IP、またはその逆です。

最初のファイル 192.168.043.031.52920-216.058.210.034.00443 には、ホスト 192.168.043.031 (tcpflow が実行されたローカルホスト) からポート 経由で転送されたデータが含まれています。 52920、ポート 443 経由でホスト 216.058.210.034 (リモート ホスト) に送信します。

2 番目のファイル 216.058.210.034.00443-192.168.043.031.52920 には、ホスト 216.058.210.034 (リモート ホスト) からポート 443 経由で送信されたデータが含まれています。 をポート 52920 経由でホスト 192.168.043.031 (tcpflow が実行されたローカルホスト) に接続します。

また、XML レポートも生成されます。これには、プログラムのコンパイル方法、実行されたコンピューター、すべての TCP 接続の記録など、プログラムに関する情報が含まれます。

お気づきかもしれませんが、tcpflow はデフォルトでトランスクリプト ファイルを現在のディレクトリに保存します。 -o オプションは、トランスクリプト ファイルが書き込まれる出力ディレクトリを指定するのに役立ちます。

sudo tcpflow -o tcpflow_files
$ sudo ls -l tcpflow_files

total 32
-rw-r--r--. 1 root root 1665 Sep 19 12:56 157.240.016.035.00443-192.168.000.103.45986
-rw-r--r--. 1 root root   45 Sep 19 12:56 169.044.082.101.00443-192.168.000.103.55496
-rw-r--r--. 1 root root 2738 Sep 19 12:56 172.217.166.046.00443-192.168.000.103.39954
-rw-r--r--. 1 root root   68 Sep 19 12:56 192.168.000.102.00022-192.168.000.103.42436
-rw-r--r--. 1 root root  573 Sep 19 12:56 192.168.000.103.39954-172.217.166.046.00443
-rw-r--r--. 1 root root 4067 Sep 19 12:56 192.168.000.103.45986-157.240.016.035.00443
-rw-r--r--. 1 root root   38 Sep 19 12:56 192.168.000.103.55496-169.044.082.101.00443
-rw-r--r--. 1 root root 3159 Sep 19 12:56 report.xml

次のように -c フラグを使用すると、キャプチャしたデータをファイルに保存せずに、受信したパケットの内容を標準出力に出力することもできます。

これを効果的にテストするには、2 番目の端末を開いてping を実行するか、インターネットを参照します。 tcpflow によってキャプチャされた ping の詳細またはブラウジングの詳細を確認できるはずです。

sudo tcpflow -c

特定のポート、たとえばポート 80 (HTTP) 上のすべてのトラフィックをキャプチャできます。 HTTP トラフィックの場合、HTTP ヘッダーとそれに続くコンテンツをすべて標準出力上で表示するか、-c スイッチを削除した場合は 1 つのファイルで表示できます。

sudo tcpflow port 80

特定のネットワーク インターフェイスからパケットをキャプチャするには、-i フラグを使用してインターフェイス名を指定します。

sudo tcpflow -i eth0 port 80

図に示すように、ターゲット ホストを指定することもできます (受け入れられる値は IP アドレス、ホスト名、またはドメインです)。

sudo tcpflow -c host 192.68.43.1
OR
sudo tcpflow -c host www.google.com 

-a フラグを使用すると、すべてのスキャナを使用したすべての処理を有効にできます。これは、-e all スイッチと同等です。

sudo tcpflow -a  
OR
sudo tcpflow -e all

特定のスキャナーをアクティブにすることもできます。使用可能なスキャナには、md5、http、netviz、tcpdemux、wifiviz が含まれます (各スキャナの詳細情報を表示するには、tcpflow -H を実行します)。

sudo tcpflow -e http
OR
sudo tcpflow -e md5
OR
sudo tcpflow -e netviz
OR
sudo tcpflow -e tcpdemux
OR
sudo tcpflow -e wifiviz

次の例は、tcpdemux を除くすべてのスキャナを有効にする方法を示しています。

sudo tcpflow -a -x tcpdemux 

TCPflow は通常、パケットをキャプチャする前にネットワーク インターフェイスを無差別モードにしようとします。これを防ぐには、次のように -p フラグを使用します。

sudo tcpflow -p -i eth0

tcpdump pcap ファイルからパケットを読み取るには、-r フラグを使用します。

sudo tcpflow -f file.pcap

-v または -d 10 オプションを使用して冗長モードを有効にできます。

sudo tcpflow -v
OR
sudo tcpflow -d 10

重要: tcpflow の制限の 1 つは、現時点では IP フラグメントを理解できないため、データは TCP 接続の一部として送信されることです。 IP フラグメントを含むファイルは正しくキャプチャされません。

詳細と使用方法のオプションについては、tcpflow のマニュアル ページを参照してください。

man tcpflow 

TCPflow Github リポジトリ: https://github.com/simsong/tcpflow

それは今のところすべてです! TCPflow は、ネットワーク パケット フローの理解やネットワーク フォレンジックの実行などに役立つ強力な TCP フロー レコーダーです。試してみて、それについてのご意見をコメントで共有してください。