本文目录导读:

- 过滤特定的请求方法(例如:只查看 POST 请求)
- 过滤包含特定请求头的 HTTP 包(例如:
Authorization) - 过滤响应头(例如:
Set-Cookie或Content-Type) - 过滤包含特定 User-Agent 的请求
- 过滤请求的路径或域名(HTTP Host 头)
- 多条件组合过滤(使用
and逻辑) - 完整抓取 HTTP 头部(包括请求行和头部)
- 抓取包含特定 HTTP 状态码的响应(如 404)
- 重要提示
- 示例:实时监控所有包含
password字段的 HTTP POST 请求
ngrep 是一个强大的网络层抓包工具,虽然不如 Wireshark 那样功能全面,但通过正则表达式可以直接在应用层(HTTP 协议)进行精确匹配。
要使用 ngrep 过滤 HTTP 头信息,核心思路是利用 正则表达式 匹配 HTTP 请求或响应头的特定字段。
以下是几种常见的过滤场景及命令示例:
过滤特定的请求方法(只查看 POST 请求)
HTTP 请求行以方法名开头(如 GET、POST)。
# 过滤所有 HTTP POST 请求(抓取 80 端口) ngrep -q -W byline "^POST" port 80 # 过滤所有 HTTP GET 请求 ngrep -q -W byline "^GET" port 80
-q:静默模式,减少非匹配信息输出。-W byline:按行显示,让输出更易读(对于头部显示至关重要)。
过滤包含特定请求头的 HTTP 包(Authorization)
如果你想看包含 Authorization 头的所有请求:
ngrep -q -W byline "Authorization:" port 80
如果你想看包含特定 Cookie 头的请求:
ngrep -q -W byline "Cookie:.*sessionid" port 80
过滤响应头(Set-Cookie 或 Content-Type)
ngrep 不区分请求和响应,它匹配网络层的数据,如果你想看服务器返回的头部,直接匹配头部字段即可:
# 查看服务器返回的 Set-Cookie 响应头 ngrep -q -W byline "Set-Cookie:" port 80 # 查看服务器返回的 Content-Type ngrep -q -W byline "Content-Type:" port 80
过滤包含特定 User-Agent 的请求
User-Agent 通常在请求头中,可以使用正则匹配:
# 匹配包含 "Mozilla" 的 User-Agent 包 ngrep -q -W byline "User-Agent:.*Mozilla" port 80 # 匹配 curl 发起的请求 ngrep -q -W byline "User-Agent:.*curl" port 80
过滤请求的路径或域名(HTTP Host 头)
如果你想监控发往特定域名的 HTTP 流量:
# 监控 Host 头为 "example.com" 的流量 ngrep -q -W byline "Host: example.com" port 80 # 监控请求路径中包含 "api" 的流量(注意:路径在请求行,而非头部) ngrep -q -W byline "^(GET|POST|PUT|DELETE).*/api/" port 80
多条件组合过滤(使用 and 逻辑)
ngrep 本身不支持逻辑 AND,但你可以利用正则写得更长一些,查找 POST 请求且包含 JSON 数据的包:
ngrep -q -W byline "^POST.*HTTP/1.1.*Content-Type: application/json" port 80
完整抓取 HTTP 头部(包括请求行和头部)
如果你希望看到完整的 HTTP 头部(不限于某一行),可以使用 -t 显示时间戳,并使用 -d 指定网卡:
sudo ngrep -t -W byline -d eth0 "Host:" port 80
抓取包含特定 HTTP 状态码的响应(如 404)
# 注意:状态码在响应行,不在头部,但可以通过正则匹配第一行 ngrep -q -W byline "HTTP/1.1 404" port 80
| 参数 | 作用 |
|---|---|
-W byline |
按行显示,强烈建议加上,否则头部信息会粘在一起 |
-q |
只打印匹配的数据包,不打印统计和匹配过程 |
-d eth0 |
指定网卡(默认监听第一个可用网卡) |
port 80 |
过滤端口(抓 HTTP 必须指定) |
"pattern" |
正则表达式模式,匹配包的任何部分 |
重要提示
- 默认只抓取 TCP 负载:
ngrep默认只抓取应用层数据(如 HTTP 头部和 body),不会抓取 TCP/IP 头,因此非常适合查看头部内容。 - HTTPS 无效:
ngrep只能过滤 明文 HTTP 流量,对于 HTTPS,你需要先解密(例如通过 MITM 代理),或者使用tshark/Wireshark等工具。 - 大小写敏感:
ngrep默认大小写敏感,HTTP 头部是大小写不敏感的,如果你担心大小写变体(如host:vsHost:),在正则中写[Hh][Oo][Ss][Tt]:会比较麻烦,通常实践中,大多数服务器和客户端都遵循标准的Host:写法。
示例:实时监控所有包含 password 字段的 HTTP POST 请求
sudo ngrep -q -W byline "^POST.*HTTP.*password" port 80
ngrep 过滤 HTTP 头的核心就是 -W byline 加上针对特定头部字段或请求行的正则匹配。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。