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 CodeHTTP 状态码
Content Length响应内容长度
TLS CertificateTLS 证书信息
CSP Header内容安全策略头
Line Count响应行数
Word Count响应词数
Location Header重定向位置
Web ServerWeb 服务器信息
Web SocketWebSocket 支持
Response Time响应时间
Request Method请求方法
Body Hash响应体哈希
Header Hash响应头哈希
URL SchemeURL 方案(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@latest

3. Docker 方式

docker pull projectdiscovery/httpx

4. 配置文件

默认配置文件路径:$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 --> H

httpx 工作原理

2. 探测流程

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: 返回探测结果

httpx 探测流程

五、使用方法

1. 基本用法

# 显示帮助
httpx -h

# 探测单个目标
httpx -u https://example.com

# 探测多个目标
httpx -u https://example.com -u https://example.org

# 从文件读取目标
httpx -l targets.txt

2. 输出控制

# 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. 高级探测

# 探测自定义端口
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. 匹配与过滤

# 匹配特定状态码
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 10000

2. 超时与重试

# 设置超时时间(默认 10 秒)
httpx -l targets.txt -timeout 5

# 设置重试次数
httpx -l targets.txt -retries 3

# 设置请求延迟
httpx -l targets.txt -delay 100ms

3. 优化选项

# 禁用回退,探测两种协议
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,8080

2. 安全测试

# 查找敏感页面
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 赏金狩猎

# 探测未授权端点
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:子域名发现工具

参考资料

  1. httpx GitHub 仓库
  2. httpx 官方文档
  3. ProjectDiscovery 团队
最后修改:2026 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏