{"id":28237032,"url":"https://github.com/cyberspacesec/go-finger","last_synced_at":"2025-06-15T11:39:23.667Z","repository":{"id":285680273,"uuid":"958971717","full_name":"cyberspacesec/go-finger","owner":"cyberspacesec","description":"GXX是一款强大的指纹识别工具，基于YAML配置的规则进行目标系统识别。 本工具支持多种协议（HTTP/HTTPS、TCP、UDP），可进行高效的批量目标扫描和精准识别。","archived":false,"fork":false,"pushed_at":"2025-05-28T03:27:49.000Z","size":30430,"stargazers_count":26,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-09T12:16:26.625Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cyberspacesec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-02T04:04:28.000Z","updated_at":"2025-06-06T06:57:31.000Z","dependencies_parsed_at":"2025-05-09T04:19:51.996Z","dependency_job_id":"c22f3519-bd52-41c5-9fb4-f427f4e4818b","html_url":"https://github.com/cyberspacesec/go-finger","commit_stats":null,"previous_names":["cyberspacesec/go-finger"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberspacesec%2Fgo-finger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberspacesec%2Fgo-finger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberspacesec%2Fgo-finger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberspacesec%2Fgo-finger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cyberspacesec","download_url":"https://codeload.github.com/cyberspacesec/go-finger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberspacesec%2Fgo-finger/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259051617,"owners_count":22798382,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-19T00:17:17.534Z","updated_at":"2025-06-10T15:31:02.397Z","avatar_url":"https://github.com/cyberspacesec.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GXX - 新一代基于YAML的指纹识别工具\n\nGXX是一款强大的指纹识别工具，基于YAML配置的规则进行目标系统识别。\n本工具支持多种协议（HTTP/HTTPS、TCP、UDP），可进行高效的批量目标扫描和精准识别。\n\n## 💡 主要特性\n\n- **强大的指纹识别** - 基于YAML的规则配置，简洁而强大\n- **高性能并发** - 使用协程池实现高效并发扫描，支持大规模目标\n- **多协议支持** - 全面支持HTTP/HTTPS、TCP、UDP协议\n- **代理功能** - 支持HTTP/SOCKS5代理，可配置多个代理地址\n- **批量扫描** - 支持从文件读取多个目标进行批量扫描\n- **多格式输出** - 支持TXT/CSV/JSON等多种输出格式\n- **自定义规则** - 灵活的指纹规则自定义功能\n- **技术栈识别** - 内置Wappalyzer引擎，快速识别网站技术组件\n- **CEL表达式** - 使用强大的CEL表达式引擎进行规则匹配\n- **实时输出** - 支持Unix domain socket实时结果输出\n\n## 🚀 快速开始\n\n### 安装\n\n```bash\n# 使用 go install 安装\ngo install github.com/yourusername/gxx@latest\n\n# 或下载预编译版本\n# 从 releases 页面下载对应平台的二进制文件\n```\n\n### 基本使用\n\n```bash\n# 扫描单个目标\ngxx -u https://example.com\n\n# 从文件读取目标列表\ngxx -f targets.txt\n\n# 使用代理\ngxx -u https://example.com --proxy http://127.0.0.1:8080\n\n# 指定输出文件\ngxx -u https://example.com -o results.txt\n\n# 开启调试模式\ngxx -u https://example.com --debug\n\n# 禁用文件日志记录\ngxx -u https://example.com --no-file-log\n\n# 设置规则线程数提高性能\ngxx -u https://example.com -rt 10000\n```\n\n## 📖 命令行参数\n\n### 输入选项\n- `-u, --url`：要扫描的目标URL/主机（可指定多个）\n- `-f, --file`：包含目标URL/主机列表的文件（每行一个）\n- `-t, --threads`：并发线程数（默认：10）\n- `-rt, --rulethreads`：指纹规则并发线程数（默认自动计算，最大：50000）\n\n### 输出选项\n- `-o, --output`：输出文件路径\n- `--format`：输出文件格式（支持 txt/csv/json，默认：txt）\n- `--sock-output`：Unix domain socket输出路径（用于实时数据流）\n\n### 调试选项\n- `--proxy`：HTTP/SOCKS5代理（支持逗号分隔的列表或文件输入）\n- `-p, --poc`：测试单个YAML文件\n- `-pf, --poc-file`：测试指定目录下的所有YAML文件\n- `--debug`：开启调试模式\n- `--no-file-log`：禁用文件日志记录，仅输出日志到控制台\n- `--timeout`：设置请求超时时间（秒，默认：5）\n\n## 🧰 API使用\n\nGXX提供了简单易用的API，便于集成到您的项目中。以下是主要API和使用示例：\n\n### 导入包\n```go\nimport (\n    \"gxx\"\n    \"gxx/types\"\n)\n```\n\n### 主要数据类型\n\n#### BaseInfoType\n包含目标站点的基本信息，包括标题、服务器信息、状态码和技术栈等：\n\n```go\ntype BaseInfoType struct {\n    Target     string                     // 目标URL\n    Title      string                     // 网页标题\n    ServerInfo *ServerInfo                // 服务器信息\n    StatusCode int32                      // HTTP状态码\n    Response   *http.Response             // HTTP原始响应\n    Wappalyzer *TypeWappalyzer            // 技术栈信息\n}\n```\n\n#### ServerInfo\n服务器信息结构体：\n\n```go\ntype ServerInfo struct {\n    OriginalServer string                 // 原始Server头信息\n    ServerType     string                 // 服务器类型\n    Version        string                 // 版本信息\n}\n```\n\n#### TargetResult\n包含扫描结果的结构体：\n\n```go\ntype TargetResult struct {\n    URL        string                     // 目标URL\n    StatusCode int32                      // HTTP状态码\n    Title      string                     // 网页标题\n    Server     *ServerInfo                // 服务器信息\n    Matches    []*FingerMatch             // 匹配的指纹信息\n    Wappalyzer *TypeWappalyzer            // 技术栈信息\n}\n```\n\n#### TypeWappalyzer\n技术栈信息结构体：\n\n```go\ntype TypeWappalyzer struct {\n    WebServers           []string         // Web服务器\n    ReverseProxies       []string         // 反向代理\n    JavaScriptFrameworks []string         // JS框架\n    JavaScriptLibraries  []string         // JS库\n    WebFrameworks        []string         // Web框架\n    ProgrammingLanguages []string         // 编程语言 \n    Caching              []string         // 缓存技术\n    Security             []string         // 安全组件\n    StaticSiteGenerator  []string         // 静态站点生成器\n    HostingPanels        []string         // 主机面板\n    Other                []string         // 其他杂项\n}\n```\n\n### 主要API函数\n\n#### 1. 初始化指纹规则\n```go\n// 创建默认配置选项\noptions, err := gxx.NewFingerOptions()\nif err != nil {\n    // 错误处理\n}\n\n// 初始化指纹规则（仅需执行一次）\nerr = gxx.InitFingerRules(options)\nif err != nil {\n    // 错误处理\n}\n```\n\n#### 2. 单个URL识别\n```go\n// 扫描单个URL\ntarget := \"https://example.com\"\nproxy := \"\" // 如果需要代理，指定代理地址\ntimeout := 5 // 超时时间，单位：秒\nworkerCount := 10000 // 规则并发线程数，可设置较高的值提高识别速度，最大50000\n\n// 执行指纹识别\nresult, err := gxx.FingerScan(target, proxy, timeout, workerCount)\nif err != nil {\n    // 错误处理\n}\n```\n\n#### 3. 获取匹配结果\n```go\n// 获取所有匹配的指纹\nmatches := gxx.GetFingerMatches(result)\nfor _, match := range matches {\n    // 指纹ID: match.Finger.Id\n    // 指纹名称: match.Finger.Info.Name\n    // 匹配结果: match.Result\n    // 请求信息: match.Request\n    // 响应信息: match.Response\n}\n```\n\n#### 4. 获取目标基础信息\n```go\n// 获取目标站点的基础信息\nbaseInfo, err := gxx.GetBaseInfo(target, proxy, timeout)\nif err != nil {\n    // 错误处理\n}\n\n// 处理结果\nfmt.Printf(\"标题: %s\\n\", baseInfo.Title)\nfmt.Printf(\"状态码: %d\\n\", baseInfo.StatusCode)\nif baseInfo.ServerInfo != nil {\n    fmt.Printf(\"服务器: %s\\n\", baseInfo.ServerInfo.ServerType)\n}\nif baseInfo.Wappalyzer != nil {\n    fmt.Printf(\"Web服务器: %v\\n\", baseInfo.Wappalyzer.WebServers)\n    fmt.Printf(\"编程语言: %v\\n\", baseInfo.Wappalyzer.ProgrammingLanguages)\n}\n```\n\n#### 5. 技术栈识别\n```go\n// 单独进行技术栈识别，不执行指纹匹配\nwappResult, err := gxx.WappalyzerScan(target, proxy, timeout)\nif err != nil {\n    // 错误处理\n}\n\n// 处理技术栈分析结果\nif len(wappResult.WebServers) \u003e 0 {\n    fmt.Printf(\"Web服务器: %v\\n\", wappResult.WebServers)\n}\nif len(wappResult.ProgrammingLanguages) \u003e 0 {\n    fmt.Printf(\"编程语言: %v\\n\", wappResult.ProgrammingLanguages)\n}\nif len(wappResult.JavaScriptFrameworks) \u003e 0 {\n    fmt.Printf(\"JS框架: %v\\n\", wappResult.JavaScriptFrameworks)\n}\n```\n\n### 完整使用示例\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"gxx\"\n    \"log\"\n)\n\nfunc main() {\n    // 1. 创建配置选项\n    options, err := gxx.NewFingerOptions()\n    if err != nil {\n        log.Fatalf(\"创建选项错误: %v\", err)\n    }\n\n    // 2. 初始化指纹规则库（仅需执行一次）\n    if err := gxx.InitFingerRules(options); err != nil {\n        log.Fatalf(\"初始化指纹规则错误: %v\", err)\n    }\n\n    // 3. 处理单个URL\n    target := \"https://example.com\"\n    proxy := \"\" // 如果不需要代理，设为空字符串\n    timeout := 5 // 超时时间，单位：秒\n    workerCount := 10000 // 规则并发线程数，可设置较高的值提高识别速度\n\n    result, err := gxx.FingerScan(target, proxy, timeout, workerCount)\n    if err != nil {\n        log.Printf(\"处理URL错误: %v\", err)\n        return\n    }\n\n    // 4. 输出基本信息\n    fmt.Printf(\"URL: %s\\n\", result.URL)\n    fmt.Printf(\"状态码: %d\\n\", result.StatusCode)\n    fmt.Printf(\"标题: %s\\n\", result.Title)\n    if result.Server != nil {\n        fmt.Printf(\"服务器: %s\\n\", result.Server.ServerType)\n    }\n\n    // 5. 处理匹配结果\n    matches := gxx.GetFingerMatches(result)\n    if len(matches) \u003e 0 {\n        fmt.Println(\"\\n匹配的指纹:\")\n        for i, match := range matches {\n            fmt.Printf(\"  %d. %s (ID: %s, 匹配结果: %v)\\n\", \n                i+1, match.Finger.Info.Name, match.Finger.Id, match.Result)\n        }\n    } else {\n        fmt.Println(\"\\n未匹配到任何指纹\")\n    }\n    \n    // 6. 获取技术栈信息\n    if result.Wappalyzer != nil {\n        fmt.Println(\"\\n技术栈信息:\")\n        if len(result.Wappalyzer.WebServers) \u003e 0 {\n            fmt.Printf(\"  Web服务器: %v\\n\", result.Wappalyzer.WebServers)\n        }\n        if len(result.Wappalyzer.ProgrammingLanguages) \u003e 0 {\n            fmt.Printf(\"  编程语言: %v\\n\", result.Wappalyzer.ProgrammingLanguages)\n        }\n        if len(result.Wappalyzer.WebFrameworks) \u003e 0 {\n            fmt.Printf(\"  Web框架: %v\\n\", result.Wappalyzer.WebFrameworks)\n        }\n        if len(result.Wappalyzer.JavaScriptFrameworks) \u003e 0 {\n            fmt.Printf(\"  JS框架: %v\\n\", result.Wappalyzer.JavaScriptFrameworks)\n        }\n    }\n}\n```\n\n## 🔍 示例代码\n\n查看 [example](example/) 目录获取完整使用示例：\n\n- [基本扫描](example/basic_scan/)：单目标扫描示例\n- [代理扫描](example/proxy_scan/)：使用代理进行扫描\n- [文件目标扫描](example/file_target_scan/)：批量扫描多个目标\n- [百度API扫描](example/api_scan_baidu/)：API集成示例\n- [Wappalyzer技术栈识别](example/wappalyzer_scan/)：网站技术栈识别\n\n## 📂 项目目录结构\n\n```\ngxx/\n├── cmd/                    # 命令行应用程序入口点\n├── pkg/                    # 核心功能实现包\n│   ├── finger/             # 指纹识别实现\n│   ├── runner/             # 扫描运行器\n│   ├── wappalyzer/         # Wappalyzer技术栈识别\n│   └── cel/                # CEL表达式处理\n├── types/                  # 类型定义\n├── utils/                  # 工具和核心功能代码\n│   ├── config/             # 配置管理\n│   ├── logger/             # 日志管理\n│   ├── common/             # 通用工具函数\n│   ├── request/            # 请求处理\n│   └── output/             # 结果输出处理\n├── logs/                   # 日志输出目录\n├── example/                # 示例代码\n├── docs/                   # 文档目录\n├── go.mod                  # Go模块定义\n└── README.md               # 项目说明文档\n```\n\n## 🔨 编译与构建\n\n### 使用 Makefile (推荐)\n\n```bash\n# 构建项目（不嵌入指纹库）\nmake build\n\n# 构建项目（嵌入指纹库）\nmake build-embed\n\n# 构建发布包（不嵌入指纹库）\nmake release\n\n# 构建发布包（嵌入指纹库）\nmake release-embed\n\n# 查看所有可用命令\nmake help\n```\n\n### 手动编译\n\n```bash\n# 基本编译\nCGO_ENABLED=0 GOARCH=arm64 GOOS=darwin go build -ldflags \"-w -s\" -o gxx main.go\n\n# 使用构建脚本\nchmod +x build.sh\n./build.sh\n```\n\n### 使用 goreleaser 编译\n\n```bash\ngoreleaser build --snapshot --clean --snapshot\n```\n\n## 📝 指纹规则格式\n\nGXX使用YAML格式定义指纹规则，规则设计简洁明了，易于理解与扩展。详细说明请参考：\n- [指纹规则格式说明](docs/指纹规则格式说明.md)\n- [指纹开发快速参考](docs/指纹开发快速参考.md)\n\n### 基本结构示例\n\n```yaml\nid: web-application\n    \ninfo:\n  name: Web应用识别\n  author: 作者名\n  description: 识别特定Web应用\n  reference:\n    - https://example.com\n  created: 2025/04/01\n    \nrules:\n  r0:\n    request:\n      method: GET\n      path: /\n    expression: response.status == 200 \u0026\u0026 response.body.ibcontains(b\"特征字符串\")\n    \nexpression: r0()\n```\n\n**提示**: 推荐使用`ibcontains`函数进行大小写不敏感的关键词匹配，这能提高识别的准确性。\n\n## 🚀 性能特性\n\nGXX专为高性能设计，主要特性包括：\n\n### 🏗️ 核心架构\n\n```\n┌─────────────────┐    ┌──────────────────┐\n│   URL任务队列     │────│   全局规则池      │\n│   (默认5线程)     │    │  (默认200线程)   │\n└─────────────────┘    └──────────────────┘\n          │                       │\n          ▼                       ▼\n┌─────────────────┐    ┌──────────────────┐\n│   缓存管理器      │    │   内存监控器      │\n│   (TTL+LRU)     │    │   (智能GC)       │\n└─────────────────┘    └──────────────────┘\n```\n\n### ⚡ 性能优化\n\n- **高效并发**: 使用ants协程池管理并发，支持大规模目标扫描\n- **智能缓存**: TTL+LRU缓存机制，避免重复请求，提升响应速度\n- **内存管理**: 智能垃圾回收和内存监控，优化大规模扫描的内存使用\n- **分级并发**: URL级别和规则级别的双重并发控制，最大化性能\n\n### 📊 配置参数\n\n**默认配置**:\n- URL工作池: 5个线程\n- 规则工作池: 200个线程  \n- 最大规则线程: 5000个\n- 缓存大小: 2048个条目\n- 缓存TTL: 10分钟\n\n**扩展API**:\n```go\n// 获取性能统计\nstats := gxx.GetPoolStats()\ncacheStats := gxx.GetCacheStats()\n\n// 内存管理\ngxx.StartMemoryMonitor()\ngxx.ForceGC()\n```\n\n## 🤝 贡献指南\n\n欢迎为GXX贡献代码或指纹规则：\n\n- **规则贡献**：通过添加新的YAML格式指纹规则文件扩展指纹库\n- **代码贡献**：遵循项目代码结构进行功能开发\n- **问题反馈**：通过Issues提交问题或功能建议\n- **文档改进**：完善项目文档和使用示例\n\n## ⚠️ 免责声明\n\n本工具仅用于授权的安全测试和研究目的。使用者应遵守相关法律法规，未经授权不得对目标系统进行扫描。工具作者不对任何滥用行为负责。\n\n## 📜 许可证\n\n[MIT License](LICENSE)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyberspacesec%2Fgo-finger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcyberspacesec%2Fgo-finger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyberspacesec%2Fgo-finger/lists"}