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 流记录器,对于理解网络数据包流和执行网络取证等等非常有用。尝试一下并在评论中与我们分享您的想法。