本文目录导读:

- 过滤特定的请求方法(例如:只查看 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 加上针对特定头部字段或请求行的正则匹配。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播