Loading... # 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. 安装方法 ```bash go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest ``` ## 3. Docker 方式 ```bash docker pull projectdiscovery/httpx ``` ## 4. 配置文件 默认配置文件路径:`$HOME/.config/httpx/config.yaml` # 四、核心架构 ## 1. 工作原理 ```mermaid 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 --> H ```  ## 2. 探测流程 ```mermaid 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. 基本用法 ```bash # 显示帮助 httpx -h # 探测单个目标 httpx -u https://example.com # 探测多个目标 httpx -u https://example.com -u https://example.org # 从文件读取目标 httpx -l targets.txt ``` ## 2. 输出控制 ```bash # 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-detect ``` ## 3. 高级探测 ```bash # 探测自定义端口 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 -jarm ``` ## 4. 匹配与过滤 ```bash # 匹配特定状态码 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 支持基于域名的认证,通过密钥文件配置: ```yaml # 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 ``` 使用方式: ```bash httpx -l targets.txt -sf secrets.yaml ``` 支持的认证类型: - BasicAuth:基本认证 - BearerToken:Bearer 令牌 - Header:自定义请求头 - Cookie:Cookie 认证 - Query:查询参数认证 # 六、作为库使用 httpx 可以作为 Go 库使用: ```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. 并发控制 ```bash # 设置线程数(默认 50) httpx -l targets.txt -threads 100 # 设置速率限制(默认 150 req/s) httpx -l targets.txt -rate-limit 200 # 设置每分钟速率限制 httpx -l targets.txt -rate-limit-minute 10000 ``` ## 2. 超时与重试 ```bash # 设置超时时间(默认 10 秒) httpx -l targets.txt -timeout 5 # 设置重试次数 httpx -l targets.txt -retries 3 # 设置请求延迟 httpx -l targets.txt -delay 100ms ``` ## 3. 优化选项 ```bash # 禁用回退,探测两种协议 httpx -l targets.txt -no-fallback # 禁用自动 CDN 检测 httpx -l targets.txt -cdn false # 限制响应大小 httpx -l targets.txt -response-size-to-read 1048576 ``` # 八、典型应用场景 ## 1. 资产发现 ```bash # 子域名存活探测 cat subdomains.txt | httpx -silent -status-code -title # IP 段 HTTP 服务发现 echo "192.168.1.0/24" | httpx -ports 80,443,8080 ``` ## 2. 安全测试 ```bash # 查找敏感页面 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 screenshots ``` ## 3. Bug 赏金狩猎 ```bash # 探测未授权端点 httpx -l targets.txt -paths common-paths.txt -status-code -mc 200,403 # 查找信息泄露 httpx -l targets.txt -ms "Error" -ms "Exception" -ms "Warning" ``` ## 4. 批量处理 ```bash # 管道模式 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:子域名发现工具 *** ## 参考资料 1. [httpx GitHub 仓库](https://github.com/projectdiscovery/httpx) 2. [httpx 官方文档](https://docs.projectdiscovery.io/tools/httpx) 3. [ProjectDiscovery 团队](https://projectdiscovery.io) 最后修改:2026 年 01 月 18 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏