httpx HTTP 多用途探测工具技术分析
一、概述
1. 简介
httpx 是由 ProjectDiscovery 团队开发的一款快速且多用途的 HTTP 工具包,它允许使用 retryablehttp 库运行多种探测。该工具设计用于在增加线程数量的同时保持结果可靠性。
2. 核心特点
A. 技术优势
- 简单且模块化的代码库,易于贡献
- 快速且完全可配置的标志以探测多个元素
- 支持多种基于 HTTP 的探测
- 智能的 HTTPS 到 HTTP 自动回退机制
- 支持 hosts、URL 和 CIDR 作为输入
- 处理边界情况,包括重试、退避等,以应对 WAF(Web 应用防火墙)
B. 应用场景
- 网络资产发现
- 安全测试和渗透测试
- Bug 赏金狩猎
- OSINT(开源情报)收集
- 管道化批量处理
二、支持的探测类型
httpx 提供了丰富的探测选项,默认启用的探测包括:
| 探测类型 | 默认启用 | 描述 |
|---|---|---|
| URL | 是 | 目标 URL |
| Title | 是 | 页面标题 |
| Status Code | 是 | HTTP 状态码 |
| Content Length | 是 | 响应内容长度 |
| TLS Certificate | 是 | TLS 证书信息 |
| CSP Header | 是 | 内容安全策略头 |
| Line Count | 是 | 响应行数 |
| Word Count | 是 | 响应词数 |
| Location Header | 是 | 重定向位置 |
| Web Server | 是 | Web 服务器信息 |
| Web Socket | 是 | WebSocket 支持 |
| Response Time | 是 | 响应时间 |
| Request Method | 是 | 请求方法 |
| Body Hash | 是 | 响应体哈希 |
| Header Hash | 是 | 响应头哈希 |
| URL Scheme | 是 | URL 方案(http/https) |
可选探测类型:
- IP:主机 IP 地址
- CNAME:CNAME 记录
- Raw HTTP:原始 HTTP 响应
- HTTP2:HTTP/2 支持
- HTTP Pipeline:HTTP 管道支持
- Virtual host:虚拟主机探测
- Paths:路径探测
- Ports:端口探测
- Favicon Hash:网站图标哈希
- Probe Status:探测状态
- Redirect chain:重定向链
- JARM Hash:JARM 指纹哈希
- ASN:自治系统号
- CDN:CDN/WAF 检测
三、安装与配置
1. 系统要求
httpx 需要 Go >= 1.24.0 版本才能成功安装。
2. 安装方法
go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest3. Docker 方式
docker pull projectdiscovery/httpx4. 配置文件
默认配置文件路径:$HOME/.config/httpx/config.yaml
四、核心架构
1. 工作原理
graph TB
A[输入源] --> B{输入类型}
B -->|hosts| C[DNS解析]
B -->|URLs| D[URL标准化]
B -->|CIDR| E[IP枚举]
C --> F[目标队列]
D --> F
E --> F
F --> G[线程池<br/>默认50线程]
G --> H[HTTP探测引擎]
H --> I{探测类型}
I -->|默认| J[基本探测]
I -->|可选| K[高级探测]
J --> L[结果收集]
K --> L
L --> M{输出格式}
M -->|JSON| N[JSONL输出]
M -->|CSV| O[CSV输出]
M -->|标准| P[终端输出]
H -->|WAF检测| Q[重试/退避]
Q --> H2. 探测流程
sequenceDiagram
participant C as 客户端
participant H as httpx
participant T as 目标服务器
participant WAF as WAF/防火墙
C->>H: 提供目标列表
H->>H: 解析和标准化输入
H->>T: HTTPS 探测
alt HTTPS 成功
T-->>H: HTTPS 响应
H->>H: 执行探测
else HTTPS 失败
H->>T: HTTP 回退探测
alt HTTP 成功
T-->>H: HTTP 响应
H->>H: 执行探测
else HTTP 失败
H->>H: 重试/退避
H->>WAF: WAF 绕过处理
end
end
H-->>C: 返回探测结果五、使用方法
1. 基本用法
# 显示帮助
httpx -h
# 探测单个目标
httpx -u https://example.com
# 探测多个目标
httpx -u https://example.com -u https://example.org
# 从文件读取目标
httpx -l targets.txt2. 输出控制
# JSON 格式输出
httpx -l targets.txt -json -o results.json
# CSV 格式输出
httpx -l targets.txt -csv -o results.csv
# 仅输出状态码
httpx -l targets.txt -status-code
# 输出多个探测字段
httpx -l targets.txt -status-code -title -server -tech-detect3. 高级探测
# 探测自定义端口
httpx -l targets.txt -ports http:8080,https:8443
# 探测虚拟主机
httpx -l targets.txt -vhost
# 截图功能
httpx -l targets.txt -screenshot
# TLS 指纹探测
httpx -l targets.txt -tls-grab -jarm4. 匹配与过滤
# 匹配特定状态码
httpx -l targets.txt -mc 200,301,302
# 匹配特定字符串
httpx -l targets.txt -ms "admin" -ms "login"
# 匹配特定响应时间
httpx -l targets.txt -mrt "< 1"
# 过滤重复响应
httpx -l targets.txt -filter-duplicates
# DSL 条件过滤
httpx -l targets.txt -fdc "status_code==200 && content_length>1000"5. 认证支持
httpx 支持基于域名的认证,通过密钥文件配置:
# secrets.yaml
id: example-auth
info:
name: Example Auth Config
static:
- type: Header
domains:
- api.example.com
headers:
- key: X-API-Key
value: secret-key-here
- type: BasicAuth
domains-regex:
- ".*\\.internal\\.com$"
username: admin
password: secret使用方式:
httpx -l targets.txt -sf secrets.yaml支持的认证类型:
- BasicAuth:基本认证
- BearerToken:Bearer 令牌
- Header:自定义请求头
- Cookie:Cookie 认证
- Query:查询参数认证
六、作为库使用
httpx 可以作为 Go 库使用:
package main
import (
"context"
"fmt"
"log"
"github.com/projectdiscovery/httpx/internal/httpx"
"github.com/projectdiscovery/httpx/runner"
)
func main() {
// 创建选项
options := httpx.Options{
Methods: []string{"GET", "POST"},
StatusCode: true,
Title: true,
Server: true,
}
// 验证选项
if err := options.Validate(); err != nil {
log.Fatal(err)
}
// 创建 runner
r, err := runner.New(&runner.Options{
Options: options,
Output: os.Stdout,
})
if err != nil {
log.Fatal(err)
}
defer r.Close()
// 执行探测
if err := r.RunEnumeration(context.Background(), []string{"https://example.com"}); err != nil {
log.Fatal(err)
}
}七、性能优化
1. 并发控制
# 设置线程数(默认 50)
httpx -l targets.txt -threads 100
# 设置速率限制(默认 150 req/s)
httpx -l targets.txt -rate-limit 200
# 设置每分钟速率限制
httpx -l targets.txt -rate-limit-minute 100002. 超时与重试
# 设置超时时间(默认 10 秒)
httpx -l targets.txt -timeout 5
# 设置重试次数
httpx -l targets.txt -retries 3
# 设置请求延迟
httpx -l targets.txt -delay 100ms3. 优化选项
# 禁用回退,探测两种协议
httpx -l targets.txt -no-fallback
# 禁用自动 CDN 检测
httpx -l targets.txt -cdn false
# 限制响应大小
httpx -l targets.txt -response-size-to-read 1048576八、典型应用场景
1. 资产发现
# 子域名存活探测
cat subdomains.txt | httpx -silent -status-code -title
# IP 段 HTTP 服务发现
echo "192.168.1.0/24" | httpx -ports 80,443,80802. 安全测试
# 查找敏感页面
httpx -l urls.txt -path admin,login,wp-admin -status-code -mc 200
# 技术栈识别
httpx -l targets.txt -tech-detect -json
# 截图收集
httpx -l targets.txt -screenshot -store-response-dir screenshots3. Bug 赏金狩猎
# 探测未授权端点
httpx -l targets.txt -paths common-paths.txt -status-code -mc 200,403
# 查找信息泄露
httpx -l targets.txt -ms "Error" -ms "Exception" -ms "Warning"4. 批量处理
# 管道模式
cat targets.txt | httpx -stream | grep "200"
# 组合其他工具
subfinder -d example.com | httpx -silent -title | nuclei九、注意事项
1. 免责声明
- 本项目处于活跃开发中,预期会有破坏性更改
- 更新前请查看变更日志
- 该工具主要设计为独立 CLI 工具,作为服务运行可能存在安全风险
2. 特定标志使用
以下标志应用于特定用例,不应与其他探测默认运行:
-ports:端口探测-path:路径探测-vhost:虚拟主机探测-screenshot:截图-csp-probe:CSP 域名探测-tls-probe:TLS 域名探测-favicon:Favicon 哈希-http2:HTTP/2 探测-pipeline:HTTP 管道-tls-impersonate:TLS 伪装
3. 输入模式
- 支持 Burp Suite XML 导出:
-l burp-export.xml -im burp - 自定义解析器支持多种协议:doh、tcp、udp
- 格式:
protocol:resolver:port(如udp:127.0.0.1:53)
十、社区与生态
1. 项目数据
- Stars:9.4k
- Forks:1k
- 贡献者:100+
- 使用者:256 个项目
- 最新版本:v1.7.4(2025 年 12 月)
2. 技术栈
- Go 61.7%
- HTML 37.9%
- 其他 0.4%
3. 相关工具
- retryablehttp-go:底层 HTTP 客户端库
- nuclei:漏洞扫描工具
- subfinder:子域名发现工具