网站搜索

TCPflow - 在 Linux 中分析和调试网络流量


TCPflow 是一个免费、开源、功能强大的基于命令行的工具,用于分析 Linux 等类 Unix 系统上的网络流量。它捕获通过 TCP 连接接收或传输的数据,并将其存储在文件中以供以后分析,并采用允许协议分析和调试的有用格式。

另请阅读:16 个用于分析 Linux 网络使用情况的最佳带宽监控工具

它实际上是一个类似 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 流都存储在自己的文件中。从上面的输出中,您可以看到有三个转录文件,它们指示两个相反方向的 tcpflow,其中第一个文件中的源 IP 和第二个文件中的目标 IP,反之亦然。

第一个文件 192.168.043.031.52920-216.058.210.034.00443 包含通过端口 从主机 192.168.043.031(运行 tcpflow 的本地主机)传输的数据52920,通过端口443主机216.058.210.034(远程主机)。

第二个文件 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 标志,在收到数据包时将其内容打印到 stdout,而不将任何捕获的数据存储到文件中。

要有效地测试这一点,请打开第二个终端并运行ping,或浏览互联网。您应该能够看到 tcpflow 捕获的 ping 详细信息或您的浏览详细信息。

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 的一个限制是,目前它不理解 IP 片段,因此数据作为 TCP 连接的一部分传输包含 IP 片段的数据将无法被正确捕获。

有关更多信息和使用选项,请参阅 tcpflow 手册页。

man tcpflow 

TCPflow Github 存储库:https://github.com/simsong/tcpflow

目前为止就这样了! TCPflow 是一个功能强大的 TCP 流记录器,对于理解网络数据包流和执行网络取证等等非常有用。尝试一下并在评论中与我们分享您的想法。