字节笔记本
2026年3月22日
Katana - 下一代 Web 爬虫框架
本文介绍 Katana,由 ProjectDiscovery 团队开发的下一代网络爬虫和蜘蛛框架,专为自动化安全测试流程中的高效爬取而设计。凭借超过 16,000 个 GitHub Stars 和活跃的开源社区支持,Katana 已成为网络安全从业者进行漏洞扫描和信息收集的首选工具之一。
项目简介
Katana 是一款快速、高度可配置的 Web 爬虫框架,支持标准模式和 Headless 无头浏览器模式两种爬取方式。它由知名安全工具厂商 ProjectDiscovery 团队打造,与该团队旗下的 Nuclei、httpx、subfinder 等工具形成了完整的自动化安全测试工具链。Katana 的设计初衷是为自动化流水线(Automation Pipeline)提供高性能的爬取能力,能够快速发现目标网站中的端点(Endpoint)、API 路径和隐藏资源。
无论是独立使用还是集成到 CI/CD 流水线中,Katana 都能灵活适配各种使用场景。它支持从单个 URL、URL 列表文件或标准输入管道接收目标,并以纯文本或 JSONL 格式输出爬取结果,方便与其他安全工具进行联动处理。
核心特性
双模式爬取引擎
Katana 提供标准模式和 Headless 无头浏览器模式两种爬取方式。标准模式基于 Go 标准的 HTTP 库实现,速度极快,无浏览器开销,适合对一般静态网站的快速爬取。Headless 模式则在真实的浏览器上下文中执行爬取,能够解析 JavaScript 渲染的内容、处理异步请求,获得更高的端点覆盖率。
JavaScript 深度解析
通过 -jc(js-crawl)选项,Katana 可以对 JavaScript 文件进行深度解析,提取其中嵌入的 API 端点、路由路径等隐藏信息。此外还支持 jsluice 解析模式,能够更深入地分析 JavaScript 文件中的逻辑调用链路。
灵活的作用域控制
爬取行为如果不受控制,很容易演变成无休止的网络请求。Katana 提供了多层作用域控制机制:预定义字段作用域(dn、rdn、fqdn)、正则表达式匹配的爬取范围(crawl-scope)和排除范围(crawl-out-scope),以及禁用默认作用域的全网爬取模式。
可定制的表单自动填充
Katana 支持实验性的自动表单填充功能(-aff),能够自动识别并填写页面中的表单字段,从而发现登录后才能访问的隐藏端点。表单配置文件支持自定义字段值,可以根据目标网站特点灵活调整。
丰富的过滤和输出选项
内置基于正则表达式的 URL 匹配和过滤、文件扩展名匹配/排除、DSL 表达式高级过滤等多种过滤机制。输出方面支持纯文本、JSONL 格式,可自定义输出模板、存储原始请求响应数据,以及按字段分类存储结果。
验证码自动处理
在 Headless 模式下,Katana 支持自动检测和处理验证码,兼容 reCAPTCHA v2/v3、Cloudflare Turnstile、hCaptcha 等主流验证码类型,通过集成外部验证码解决服务实现自动化绕过。
速率限制与并发控制
提供请求延迟(delay)、并发数(concurrency)、并行度(parallelism)、每秒/每分钟请求限制(rate-limit)等多维度的速率控制选项,既能在允许的范围内高速爬取,也能避免因请求过于频繁而被目标封禁。
作为库使用
除了命令行工具外,Katana 还可以作为 Go 语言库集成到自定义程序中,通过创建 Option 结构体实例并调用 crawler.Crawl 方法来实现程序化的爬取功能。
技术栈
- 核心语言:Go(96%),JavaScript(3.8%)
- 许可证:MIT License
- 最低 Go 版本:Go 1.25+
- 包管理:Go Modules
- 运行环境:支持 Linux、macOS、Windows,同时提供 Docker 镜像
- 浏览器依赖:Headless 模式需要 Chromium 或 Google Chrome
- 集成生态:可与 httpx、nuclei、subfinder 等 ProjectDiscovery 工具链无缝协作
安装指南
通过 Go 安装(推荐)
CGO_ENABLED=1 go install github.com/projectdiscovery/katana/cmd/katana@latest通过 Docker 安装
docker pull projectdiscovery/katana:latestUbuntu 系统安装前置依赖
sudo apt update && sudo apt install zip curl wget git
sudo snap install golang --classic
# 安装 Chrome 浏览器(Headless 模式所需)
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
sudo apt update && sudo apt install google-chrome-stable
go install github.com/projectdiscovery/katana/cmd/katana@latest预编译二进制文件
从 GitHub Releases 页面下载对应平台的预编译二进制文件,无需安装 Go 环境即可直接使用。
快速开始
基本用法 -- 单个 URL 爬取
katana -u https://tesla.com多个 URL 爬取(逗号分隔)
katana -u https://tesla.com,https://google.com从文件读取 URL 列表
katana -list url_list.txt管道输入
echo https://tesla.com | katana与 httpx 联动使用
cat domains | httpx | katanaHeadless 模式爬取
katana -u https://tesla.com -headless -system-chrome使用示例
指定爬取深度
katana -u https://tesla.com -d 5启用 JavaScript 解析
katana -u https://tesla.com -jc限制爬取时间
katana -u https://tesla.com -ct 2自动表单填充
katana -u https://tesla.com -aff过滤相似 URL
katana -u https://tesla.com -fsu按扩展名过滤
# 仅显示 JS、JSP、JSON 文件
katana -u https://tesla.com -silent -em js,jsp,json
# 过滤掉 CSS、TXT、MD 文件
katana -u https://tesla.com -silent -ef css,txt,md使用正则过滤 URL
# 仅匹配 shop 子域名
katana -u https://tesla.com -mr 'https://shop\.tesla\.com/*' -silent
# 过滤掉 www 子域名
katana -u https://tesla.com -fr 'https://www\.tesla\.com/*' -silentDSL 高级过滤
# 匹配状态码为 200 的端点
katana -u https://www.hackerone.com -mdc 'status_code == 200'
# 过滤使用 Cloudflare 的端点
katana -u https://www.hackerone.com -fdc 'contains(to_lower(technologies), "cloudflare")'带认证的爬取
# 通过自定义 Header 认证
katana -u https://tesla.com -H 'Cookie: usrsess=AmljNrESo'
# 从文件加载认证信息
katana -u https://tesla.com -H cookie.txt连接活跃浏览器会话
# 启动带远程调试的 Chrome(第一步)
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
# 使用 WebSocket URL 连接已认证的浏览器会话(第二步)
katana -headless -u https://tesla.com -cwu ws://127.0.0.1:9222/devtools/browser/c5316c9c-19d6-42dc-847a-41d1aeebf7d6 -no-incognito速率控制
# 请求延迟 20 秒
katana -u https://tesla.com -delay 20
# 并发数 20
katana -u https://tesla.com -c 20
# 限制每秒 100 个请求
katana -u https://tesla.com -rl 100输出控制
# 输出到文件
katana -u https://example.com -no-scope -output example_endpoints.txt
# JSONL 格式输出
katana -u https://example.com -jsonl
# 自定义输出模板
katana -u https://example.com -output-template '{{email}} - {{url}}'
# 存储完整请求响应
katana -u https://example.com -no-scope -store-response作为 Go 库使用
package main
import (
"math"
"github.com/projectdiscovery/gologger"
"github.com/projectdiscovery/katana/pkg/engine/standard"
"github.com/projectdiscovery/katana/pkg/types"
)
func main() {
options := &types.Options{
MaxDepth: 3,
FieldScope: "rdn",
BodyReadSize: math.MaxInt,
Timeout: 10,
Concurrency: 10,
Parallelism: 10,
RateLimit: 150,
Strategy: "depth-first",
OnResult: func(result output.Result) {
gologger.Info().Msg(result.Request.URL)
},
}
crawlerOptions, err := types.NewCrawlerOptions(options)
if err != nil {
gologger.Fatal().Msg(err.Error())
}
defer crawlerOptions.Close()
crawler, err := standard.New(crawlerOptions)
if err != nil {
gologger.Fatal().Msg(err.Error())
}
defer crawler.Close()
err = crawler.Crawl("https://www.hackerone.com")
if err != nil {
gologger.Warning().Msgf("Could not crawl: %s", err.Error())
}
}项目链接
- GitHub 仓库:https://github.com/projectdiscovery/katana
- 官方文档:https://docs.projectdiscovery.io/tools/katana/
- 许可证:MIT License
- 最新版本:v1.5.0(2026年3月发布)
- Stars:16,100+
- Forks:1,000+
- Discord 社区:通过 GitHub 仓库中的链接加入