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将所有捕获的数据存储在表单中具有名称的文件中(如果使用某些选项(如时间戳 ),这可能会有所不同)。
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包含通过端口52920从主机192.168.043.031 (运行tcpflow的localhost)经由端口443传输到主机216.058.210.034 (远程主机)的数据。
第二个文件216.058.210.034.00443-192.168.043.031.52920包含通过端口443从主机216.058.210.034 (远程主机)发送到主机192.168.043.031 (运行tcpflow的localhost)的数据,通过端口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
您还可以在收到数据包时将数据包的内容打印到stdout ,而不使用-c
标志将任何捕获的数据存储到文件中,如下所示。
要有效地测试,请打开第二个终端并运行ping或浏览互联网。 您应该能够看到tcpflow捕获的ping详细信息或浏览详细信息。
$ sudo tcpflow -c
可以捕获特定端口上的所有流量,例如端口80 ( HTTP )。 在HTTP流量的情况下,如果删除了-c
开关,您将能够在stdout或一个文件中看到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片段,因此作为包含IP片段的TCP连接的一部分传输的数据将无法正确捕获。
有关更多信息和用法选项,请参见tcpflow手册页。
$ man tcpflow
TCPflow Github存储库 : https : //github.com/simsong/tcpflow
目前为止就这样了! TCPflow是一个功能强大的TCP流记录器,可用于理解网络数据包流和执行网络取证等等。 尝试一下,在评论中与我们分享您的想法。