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将所有捕获的数据存储在表单中具有名称的文件中(如果使用某些选项(如时间戳 ),这可能会有所不同)。

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

可以捕获特定端口上的所有流量,例如端口80HTTP )。 在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流记录器,可用于理解网络数据包流和执行网络取证等等。 尝试一下,在评论中与我们分享您的想法。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏