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


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

それはワイヤーからまたは格納されたファイルからのパケットを処理するので実際にはtcpdumpのようなツールです。それは、その対応物によってサポートされているのと同じ強力なフィルタリング式をサポートしています。唯一の違いは、tcpflowがすべてのTCPパケットを整然としたものにし、後で分析するために各フローを別々のファイル(フローの方向ごとに1つのファイル)にまとめることです。

その機能セットには、圧縮された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フローはそれぞれ独自のファイルに格納されています。上記の出力から、2つの反対方向のtcpflowを示す3つのトランスクリプトファイルがあることがわかります。1つ目のファイルの送信元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 にはポート 443 216.058.210.034 (リモートホスト)から送信されたデータが含まれていますstrong>ポート 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 フラグを使用して、キャプチャしたデータをファイルに保存せずに、パケットの内容を受信時に stdout に出力することもできます。

これを効果的にテストするには、2台目の端末を開いて ping を実行するか、インターネットを閲覧します。あなたはpingの詳細やあなたのブラウジングの詳細がtcpflowによって捕らえられているのを見ることができるはずです。

$ sudo tcpflow -c

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

$ 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 のmanページをご覧ください。

$ man tcpflow 

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

それは今のところすべてです!ある[ TCPフローは、ネットワークのパケットフローを理解し、ネットワークフォレンジックを実行するために、そしてそれ以上に便利な強力なTCPフローレコーダーです。それを試してみて、コメントでそれについてのあなたの考えを私たちと共有してください。