跳到主要内容

fuzzx

fuzzx 库是 fuzz 的新一代实现,围绕 FuzzRequest 对 HTTP 请求做变异与高性能批量发包,提供更清晰的请求构造与连接池/重定向控制,是 Web 模糊测试的推荐入口之一。

典型使用场景:

  • 构造请求:fuzzx.NewRequest / fuzzx.MustNewRequest 从原始报文构建可变异请求。
  • 传输控制:fuzzx.https / fuzzx.host / fuzzx.port / fuzzx.proxy 配置目标与代理,fuzzx.concurrentLimit / fuzzx.delay / fuzzx.timeout / fuzzx.connPool 控制并发与连接池,fuzzx.noRedirect / fuzzx.redirectTimes / fuzzx.noFixContentLength 控制重定向与报文修正。

与相邻库的关系:fuzzxfuzz 同源、定位一致(HTTP 变异测试),常配合 httpool(请求池)与 poc(精确请求)使用。

共 18 个函数

函数索引

函数参数返回值说明
fuzzx.MustNewRequestraw []byte*FuzzRequest根据原始请求报文构造一个 fuzzx 请求对象,报文非法时直接 panic,便于在确定输入合法时简化调用
fuzzx.NewRequestraw []byte*FuzzRequest, error根据原始请求报文构造一个 fuzzx 请求对象,用于新一代的 HTTP 请求变形与批量发包
fuzzx.concurrentLimiti intHttpPoolConfigOptionsize 是一个 HTTP 连接池/批量请求配置选项,用于设置并发请求数量(并发上限)
fuzzx.connPoolb boolHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于设置是否复用底层 TCP 连接池以提升性能
fuzzx.contextctx context.ContextHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于传入上下文以便外部取消批量任务
fuzzx.delayb float64HttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于设置每个请求之间的固定延迟秒数
fuzzx.fromPluginplugin stringHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于标记请求来源的插件名称
fuzzx.hosth string, isHttps boolHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于强制指定请求实际连接的目标主机(覆盖报文中的 Host)
fuzzx.httpsf boolHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于设置是否以 HTTPS 协议发送请求
fuzzx.namingContextinvokerName stringHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于设置命名调用上下文以便对并发任务进行分组限流
fuzzx.noFixContentLengthf boolHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于设置是否不自动修复 Content-Length 头
fuzzx.noRedirecti boolHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于设置是否禁止跟随重定向
fuzzx.portport intHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于强制指定请求实际连接的目标端口
fuzzx.redirectTimesf intHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于设置最大重定向跟随次数
fuzzx.runtimeIDi stringHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于设置运行时 ID 以便结果关联与追踪
fuzzx.sourcei stringHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于标记请求的来源(如关联的插件名)
fuzzx.timeoutf float64HttpPoolConfigOptionperRequestTimeout 是一个 HTTP 连接池/批量请求配置选项,用于设置单个请求的超时时间(单位:秒)

可变参数函数索引

函数参数返回值说明
fuzzx.proxyproxies ...stringHttpPoolConfigOption是一个 HTTP 连接池/批量请求配置选项,用于设置请求所使用的代理(支持多个,依次尝试)

函数详情

MustNewRequest

MustNewRequest(raw []byte) *FuzzRequest

根据原始请求报文构造一个 fuzzx 请求对象,报文非法时直接 panic,便于在确定输入合法时简化调用

参数

参数名类型说明
raw[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
r1*FuzzRequest构造好的 fuzzx 请求对象

示例

raw = []byte(`GET / HTTP/1.1
Host: www.example.com

`)
freq = fuzzx.MustNewRequest(raw)
freq.FuzzPath("/a", "/b").Show()

NewRequest

NewRequest(raw []byte) (*FuzzRequest, error)

根据原始请求报文构造一个 fuzzx 请求对象,用于新一代的 HTTP 请求变形与批量发包

参数

参数名类型说明
raw[]byte原始 HTTP 请求报文字节数组

返回值

序号类型说明
r1*FuzzRequest构造好的 fuzzx 请求对象
r2error错误信息,报文非法时返回非空

示例

raw = []byte(`GET / HTTP/1.1
Host: www.example.com

`)
freq = fuzzx.NewRequest(raw)~
freq.FuzzPath("/a", "/b").Show()

concurrentLimit

concurrentLimit(i int) HttpPoolConfigOption

size 是一个 HTTP 连接池/批量请求配置选项,用于设置并发请求数量(并发上限)

参数

参数名类型说明
iint并发数量

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzz / fuzzx 等

示例

// 设置 20 并发,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, httpool.size(20))~

connPool

connPool(b bool) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于设置是否复用底层 TCP 连接池以提升性能

参数

参数名类型说明
bbool是否启用连接池复用

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzzx 等

示例

// 启用连接池复用,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, httpool.connPool(true))~

context

context(ctx context.Context) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于传入上下文以便外部取消批量任务

参数

参数名类型说明
ctxcontext.Context上下文对象

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzzx 等

示例

// 传入可取消的上下文,依赖网络,无法本地验证(仅作示意)
ctx = context.New()
res = httpool.Pool(reqs, httpool.context(ctx))~

delay

delay(b float64) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于设置每个请求之间的固定延迟秒数

参数

参数名类型说明
bfloat64延迟时间,单位为秒,支持小数

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzz.Exec / fuzzx 等

示例

// 设置每个请求间隔 1 秒,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, fuzzx.delay(1))~

fromPlugin

fromPlugin(plugin string) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于标记请求来源的插件名称

参数

参数名类型说明
pluginstring来源插件名称

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 fuzzx 等

示例

// 标记来源插件,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, fuzzx.fromPlugin("my-plugin"))~

host

host(h string, isHttps bool) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于强制指定请求实际连接的目标主机(覆盖报文中的 Host)

参数

参数名类型说明
hstring目标主机地址(可包含端口或 scheme)
isHttpsbool当地址未带端口时,是否按 HTTPS 推断默认端口(443/80)

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzzx 等

示例

// 强制连接指定主机,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, httpool.host("127.0.0.1", false), httpool.port(8080))~

https

https(f bool) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于设置是否以 HTTPS 协议发送请求

参数

参数名类型说明
fbool是否使用 HTTPS

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzzx 等

示例

// 以 HTTPS 发送,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, httpool.https(true))~

namingContext

namingContext(invokerName string) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于设置命名调用上下文以便对并发任务进行分组限流

参数

参数名类型说明
invokerNamestring调用者名称,用于并发分组标识

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 fuzz / fuzzx 等

示例

// 设置命名调用上下文,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, fuzzx.namingContext("scan-group-1"))~

noFixContentLength

noFixContentLength(f bool) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于设置是否不自动修复 Content-Length 头

参数

参数名类型说明
fbool是否禁止自动修复 Content-Length

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzzx 等

示例

// 不自动修复 Content-Length,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, httpool.noFixContentLength(true))~

noRedirect

noRedirect(i bool) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于设置是否禁止跟随重定向

参数

参数名类型说明
ibool是否禁止跟随重定向

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 fuzzx / fuzz 等

示例

// 禁止跟随重定向,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, fuzzx.noRedirect(true))~

port

port(port int) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于强制指定请求实际连接的目标端口

参数

参数名类型说明
portint目标端口

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzzx 等

示例

// 强制连接 8080 端口,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, httpool.host("127.0.0.1", false), httpool.port(8080))~

redirectTimes

redirectTimes(f int) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于设置最大重定向跟随次数

参数

参数名类型说明
fint最大重定向次数

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzzx 等

示例

// 最多跟随 3 次重定向,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, httpool.redirectTimes(3))~

runtimeID

runtimeID(i string) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于设置运行时 ID 以便结果关联与追踪

参数

参数名类型说明
istring运行时 ID 字符串

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzzx 等

示例

// 设置运行时 ID,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, fuzzx.runtimeID("task-001"))~

source

source(i string) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于标记请求的来源(如关联的插件名)

参数

参数名类型说明
istring来源标识字符串

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzzx 等

示例

// 标记请求来源,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, fuzzx.source("my-plugin"))~

timeout

timeout(f float64) HttpPoolConfigOption

perRequestTimeout 是一个 HTTP 连接池/批量请求配置选项,用于设置单个请求的超时时间(单位:秒)

参数

参数名类型说明
ffloat64超时时间,单位为秒,支持小数

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzz / fuzzx 等

示例

// 设置单请求超时 5 秒,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, httpool.perRequestTimeout(5))~

可变参数函数详情

proxy

proxy(proxies ...string) HttpPoolConfigOption

是一个 HTTP 连接池/批量请求配置选项,用于设置请求所使用的代理(支持多个,依次尝试)

可选参数

参数名类型说明
proxies...string一个或多个代理地址,支持 http、https、socks4、socks5 协议

返回值

序号类型说明
r1HttpPoolConfigOption一个连接池配置选项,作为可变参数传入 httpool.Pool / fuzzx 等

示例

// 通过本地代理发送,依赖网络,无法本地验证(仅作示意)
res = httpool.Pool(reqs, httpool.proxy("http://127.0.0.1:8083"))~