sdk

package
v1.2.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 4, 2025 License: GPL-3.0 Imports: 6 Imported by: 0

README

Spray SDK

Spray SDK 提供了简洁的 Go API,用于 HTTP URL 检测和路径暴力破解。

核心概念

SDK 由两部分组成:

  1. SprayEngine: 管理持久化状态(指纹库等)
  2. 两个核心 API:
    • CheckStream: URL 批量检测,返回 channel
    • BruteStream: 路径暴力破解,返回 channel

其他 API(CheckBrute)都是对 Stream API 的简单封装,你也可以根据需要自行封装。

快速开始

import "github.com/chainreactors/spray/sdk"

// 1. 创建 SprayEngine
engine := sdk.NewSprayEngine(nil)

// 2. 初始化(加载指纹库等)
engine.Init()

// 3. 使用
ctx := context.Background()

// URL 检测
urls := []string{"http://example.com", "http://httpbin.org"}
resultCh, _ := engine.CheckStream(ctx, urls)
for result := range resultCh {
    fmt.Printf("%s [%d]\n", result.UrlString, result.Status)
}

// 路径暴力破解
wordlist := []string{"admin", "api", "test"}
resultCh, _ := engine.BruteStream(ctx, "http://example.com", wordlist)
for result := range resultCh {
    fmt.Printf("%s [%d]\n", result.UrlString, result.Status)
}

配置

使用默认配置
engine := sdk.NewSprayEngine(nil)

默认配置针对 SDK 场景优化:静默模式、无进度条、单 pool、20 线程。

自定义配置
opt := sdk.DefaultConfig()
opt.Threads = 100
opt.Timeout = 10
opt.Filter = "current.Status == 404"  // 过滤 404
opt.Headers = []string{"Authorization: Bearer token"}

engine := sdk.NewSprayEngine(opt)
运行时修改
engine.SetThreads(50)
engine.SetTimeout(10)

API 参考

SprayEngine
// 创建实例
engine := sdk.NewSprayEngine(opt)  // opt 为 nil 时使用默认配置

// 初始化(必须调用)
engine.Init()

// 设置参数
engine.SetThreads(threads)
engine.SetTimeout(timeout)
核心 API
// URL 检测(流式)
CheckStream(ctx, urls) -> channel

// 暴力破解(流式)
BruteStream(ctx, baseURL, wordlist) -> channel
便捷 API
// URL 检测(批量)
Check(ctx, urls) -> []result

// 暴力破解(批量)
Brute(ctx, baseURL, wordlist) -> []result

配置选项

core.Option 包含所有 spray 的配置项,常用的有:

请求配置

  • Method: HTTP 方法
  • Timeout: 超时时间(秒)
  • Threads: 线程数
  • Headers: 自定义请求头
  • MaxBodyLength: 最大响应体长度(KB)

模式配置

  • Mod: 扫描模式(pathhost
  • Filter: 过滤规则(expr 表达式)
  • Match: 匹配规则(expr 表达式)
  • BlackStatus: 黑名单状态码
  • WhiteStatus: 白名单状态码
  • RateLimit: 速率限制(请求/秒)

插件配置

  • Finger: 启用指纹识别
  • CrawlPlugin: 启用爬虫
  • BakPlugin: 启用备份文件检测

完整配置项参考 core.Option 结构体。

结果结构

type SprayResult struct {
    UrlString   string              // URL
    Status      int                 // HTTP 状态码
    BodyLength  int                 // 响应体长度
    Title       string              // 页面标题
    IsValid     bool                // 是否有效
    Frameworks  common.Frameworks   // 识别的框架
    Extracts    map[string][]string // 提取的信息
}

完整示例

示例 1: URL 批量检测
package main

import (
    "context"
    "fmt"
    "github.com/chainreactors/spray/sdk"
)

func main() {
    engine := sdk.NewSprayEngine(nil)
    engine.Init()
    engine.SetThreads(50)

    urls := []string{
        "http://example.com",
        "http://httpbin.org/get",
    }

    ctx := context.Background()
    results, _ := engine.Check(ctx, urls)

    for _, r := range results {
        if r.IsValid {
            fmt.Printf("[+] %s [%d] %s\n", r.UrlString, r.Status, r.Title)
        }
    }
}
示例 2: 路径暴力破解(流式)
package main

import (
    "context"
    "fmt"
    "github.com/chainreactors/spray/sdk"
)

func main() {
    opt := sdk.DefaultConfig()
    opt.Threads = 100
    opt.Filter = "current.Status == 404"

    engine := sdk.NewSprayEngine(opt)
    engine.Init()

    wordlist := []string{"admin", "api", "test", ".git"}
    ctx := context.Background()

    resultCh, _ := engine.BruteStream(ctx, "http://example.com", wordlist)
    for result := range resultCh {
        fmt.Printf("[+] %s [%d] %d bytes\n",
            result.UrlString, result.Status, result.BodyLength)
    }
}
示例 3: 多实例共享指纹库
package main

import (
    "context"
    "github.com/chainreactors/spray/sdk"
)

func main() {
    // 第一个实例初始化指纹库
    engine1 := sdk.NewSprayEngine(nil)
    engine1.Init()

    // 第二个实例共享已加载的指纹库
    opt2 := sdk.DefaultConfig()
    opt2.Threads = 100
    engine2 := sdk.NewSprayEngine(opt2)
    // 不需要再次 Init

    ctx := context.Background()

    // 并发使用
    go engine1.Check(ctx, urls1)
    go engine2.Check(ctx, urls2)
}

注意事项

  1. 必须初始化: 创建 SprayEngine 后必须调用 Init() 加载指纹库
  2. 配置克隆: SDK 内部会克隆配置,避免并发修改
  3. 共享状态: 多个 SprayEngine 实例共享已加载的指纹库
  4. 自动清理: Stream 模式会自动清理资源

许可证

MIT License

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DefaultConfig

func DefaultConfig() *core.Option

DefaultConfig 返回默认配置 基于 core.Option 的默认值,并针对 SDK 使用场景进行优化

Types

type SprayEngine

type SprayEngine struct {
	Option *core.Option // 默认配置选项
}

SprayEngine Spray 扫描器 SDK

func NewSprayEngine

func NewSprayEngine(opt *core.Option) *SprayEngine

NewSprayEngine 创建新的 Spray SDK 实例

func (*SprayEngine) Brute

func (s *SprayEngine) Brute(ctx context.Context, baseURL string, wordlist []string) ([]*parsers.SprayResult, error)

Brute 暴力破解,返回所有结果切片

func (*SprayEngine) BruteStream

func (s *SprayEngine) BruteStream(ctx context.Context, baseURL string, wordlist []string) (<-chan *parsers.SprayResult, error)

BruteStream 暴力破解流式模式,返回实时结果 channel

func (*SprayEngine) Check

func (s *SprayEngine) Check(ctx context.Context, urls []string) ([]*parsers.SprayResult, error)

Check 批量 URL 检测,返回所有结果切片

func (*SprayEngine) CheckStream

func (s *SprayEngine) CheckStream(ctx context.Context, urls []string) (<-chan *parsers.SprayResult, error)

CheckStream 批量 URL 检测流式模式,返回实时结果 channel

func (*SprayEngine) Init

func (s *SprayEngine) Init() error

Init 初始化 SDK,加载必要的配置(指纹库等持久化状态)

func (*SprayEngine) SetThreads

func (s *SprayEngine) SetThreads(threads int)

SetThreads 设置线程数

func (*SprayEngine) SetTimeout

func (s *SprayEngine) SetTimeout(timeout int)

SetTimeout 设置超时时间(秒)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL