如何在 Linux 上通过命令行嗅探 HTTP 流量
假设您出于某种原因想要嗅探线路上的实时 HTTP Web 流量(即 HTTP 请求和响应)。例如,您可能正在测试 Web 服务器的实验性功能。或者您可能正在调试 Web 应用程序或 RESTful 服务。或者您可能正在尝试对 PAC(代理自动配置)进行故障排除或检查是否有从网站秘密下载的任何恶意软件文件。无论原因是什么,在某些情况下,HTTP 流量嗅探对于系统管理员、开发人员甚至最终用户来说都是有帮助的。
虽然 tcpdump 等数据包嗅探工具广泛用于实时数据包转储,但您需要设置适当的过滤来仅捕获 HTTP 流量,即使如此,它们的原始输出通常也无法在 HTTP 协议级别轻松解释。实时 Web 服务器日志解析器(例如 ngxtop
)提供人类可读的实时 Web 流量跟踪,但仅适用于对实时 Web 服务器日志的完全访问。
最好的是拥有类似于 tcpdump 的嗅探工具,但仅针对 HTTP 流量。事实上,httpry
正是:HTTP 数据包嗅探工具。 httpry
捕获网络上的实时 HTTP 数据包,并以人类可读的格式在 HTTP 协议级别显示其内容。在本教程中,让我们看看如何使用 httpry
嗅探 HTTP 流量。
在 Linux 上安装 httpry
在 Ubuntu 或 Debian 上安装 httpry
在基于 Debian 的系统上,httpry
在基本存储库中不可用。因此从源头构建它:
$ sudo apt-get install gcc make git libpcap0.8-dev
$ git clone https://github.com/jbittel/httpry.git
$ cd httpry
$ make
$ sudo make install
在 CentOS 或 RHEL 上安装 httpry
首先,启用 EPEL 存储库,然后使用 yum 命令:
$ sudo yum install httpry
在 Fedora 上安装 httpry
在 Fedora 上,只需运行:
$ sudo yum install httpry
在基于 RPM 的 Linux 上构建 httpry
您可以通过以下方式轻松地从源代码构建httpry
:
$ sudo yum install gcc make git libpcap-devel
$ git clone https://github.com/jbittel/httpry.git
$ cd httpry
$ make
$ sudo make install
httpry的基本用法
httpry
的基本用例如下。
$ sudo httpry -i <network-interface>
httpry
然后监听指定的网络接口,并实时显示捕获的 HTTP 请求/响应。

然而,在大多数情况下,当数据包进出时,您将被快速滚动的输出淹没。所以你想保存捕获的HTTP数据包以供离线分析。为此,请使用 -b
或 -o
选项。 -b
选项允许您将原始 HTTP 数据包按原样保存到二进制文件中,然后可以使用 httpry
重放。另一方面,-o
选项将 httpry
的人类可读输出保存到文本文件中。
要将原始 HTTP 数据包保存到二进制文件中:
$ sudo httpry -i eth0 -b output.dump
要重放保存的 HTTP 数据包:
$ httpry -r output.dump
请注意,当您使用 -r
选项读取转储文件时,您不需要 root 权限。
要将 httpry
的输出保存到文本文件:
$ sudo httpry -i eth0 -o output.txt
httpry的高级用法
如果您只想监控特定的 HTTP 方法(例如,GET
、POST
、PUT
、HEAD
、CONNECT
等),请使用 -m
选项:
$ sudo httpry -i eth0 -m get,head

如果您下载了 httpry
的源代码,您会注意到源代码附带了一组 Perl 脚本,这些脚本有助于分析 httpry
的输出。这些脚本可以在 httpry/scripts/plugins
目录中找到。如果您想为 httpry
的输出编写自定义解析器,这些脚本可以是很好的起点。他们的一些能力是:
hostnames
:显示包含计数的唯一主机名列表。find_proxies
:检测网络代理。search_terms
:查找并统计在搜索服务中输入的搜索词。content_analysis
:查找包含特定关键字的 URI。xml_output
:将输出转换为 XML 格式。log_summary
:生成日志摘要。db_dump
:将日志文件数据转储到 MySQL 数据库中。
在使用这些脚本之前,首先使用 -o
选项运行 httpry
一段时间。获得输出文件后,使用以下命令立即运行脚本:
$ cd httpry/scripts
$ perl parse_log.pl -d ./plugins <httpry-output-file>
您可能会遇到多个插件的警告。例如,如果您尚未设置具有 DBI 接口的 MySQL 数据库,db_dump
插件可能会失败。如果插件无法初始化,它将自动被禁用。所以你可以忽略这些警告。
parse_log.pl
完成后,您将在httpry/scripts
目录中看到一些分析结果(*.txt/xml
)。例如,log_summary.txt
如下所示。

总而言之,如果您需要解释实时 HTTP 数据包,httpry
可以成为您的救星。对于普通 Linux 用户来说,这可能并不常见,但做好准备总没有坏处。您觉得这个工具怎么样?