TCPflow – 在 Linux 中分析和调试网络流量
TCPflow是一款免费的开源、功能强大的命令行工具,用于分析类 Unix 系统(如 Linux)上的网络流量。它捕获通过 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 将所有捕获的数据存储在具有以下形式名称的文件中(如果使用某些选项(例如timestamp ),情况可能会有所不同)。
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传输到主机216.058.210.034(远程主机)通过端口443传输的数据。
第二个文件216.058.210.034.00443-192.168.043.031.52920包含从主机216.058.210.034(远程主机)通过端口443发送到主机192.168.043.031(运行 tcpflow 的本地主机)的数据,该数据通过端口52920发送。
还会生成一个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
,而不将任何捕获的数据存储到文件中,使用如下标志。
为了有效地测试这一点,请打开第二个终端并运行ping,或浏览互联网。您应该能够看到 tcpflow 捕获的 ping 详细信息或浏览详细信息。
$ sudo tcpflow -c
可以捕获特定端口上的所有流量,例如端口80 ( HTTP )。对于 HTTP 流量,您将能够在 stdout 上或一个文件中看到 HTTP 标头及其后的内容(如果-c
删除了开关)。
$ 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
所有开关。
$ 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 片段,因此作为包含 IP 片段的 TCP 连接的一部分传输的数据将无法被正确捕获。
有关更多信息和使用选项,请参阅tcpflow手册页。
$ man tcpflow
TCPflow Github 存储库:https://github.com/simsong/tcpflow
现在就这些了!TCPflow是一款功能强大的 TCP 流记录器,可用于了解网络数据包流和执行网络取证等。尝试一下并在评论中与我们分享您的想法。