从 OSINT 归档中提取 URL,用于安全洞察。
Urx 是一款命令行工具,旨在从 OSINT 归档(如 Wayback Machine 和 Common Crawl)中收集 URL。基于 Rust 构建以实现高效,它利用异步处理快速查询多个数据源。该工具简化了为指定域名收集 URL 信息的过程,提供全面的数据集,可用于多种目的,包括安全测试和分析。

# https://crates.io/crates/urx
cargo install urx
# https://formulae.brew.sh/formula/urx
brew install urx
git clone https://github.com/hahwul/urx.git
cd urx
cargo build --release
编译后的二进制文件位于 target/release/urx。
# 扫描单个域名
urx example.com
# 扫描多个域名
urx example.com example.org
# 从文件读取域名
cat domains.txt | urx
Usage: urx [OPTIONS] [DOMAINS]...
Arguments:
[DOMAINS]... 要获取 URL 的域名
Options:
-c, --config <CONFIG> 加载配置文件
--provider-config <PATH> 单独的提供商配置文件,仅包含 API 密钥(默认:$XDG_CONFIG_HOME/urx/provider-config.toml)。CLI/环境变量 > provider-config > 主配置。
-h, --help 打印帮助信息
-V, --version 打印版本号
Input Options:
--files <FILES>... 直接从文件读取 URL(支持 WARC、URLTeam 压缩文件和文本文件)
--domain-list <PATH> 换行分隔的域名文件,用于扫描(可重复;与位置参数 DOMAINS 和 stdin 合并;允许 `#` 注释)
Output Options:
-o, --output <OUTPUT> 输出结果的文件
--output-dir <PATH> 将每个域名的结果写入该目录下的单独文件(扩展名与 --format 匹配)。可与 --output / stdout 共存。
-f, --format <FORMAT> 输出格式(例如 "plain"、"json"、"csv")[默认: plain]
--merge-endpoint 合并路径相同且参数合并的端点
--normalize-url 规范化 URL 以实现更好的去重(排序查询参数、移除尾部斜杠)
Provider Options:
--providers <PROVIDERS>
要使用的提供商(逗号分隔,例如 "wayback,cc,otx,arquivo,vt,urlscan")[默认: wayback,cc,otx]
--exclude-providers <EXCLUDE_PROVIDERS>
要排除的提供商(逗号分隔)。与 --providers 或 --all-providers 冲突时优先。
--all-providers
启用所有支持的提供商。仅当有 API 密钥时才激活需要密钥的提供商。
--list-providers
列出所有支持的提供商后退出。
--subs
搜索时包含子域名
--cc-index <CC_INDEX>
要使用的 Common Crawl 索引;接受逗号分隔列表以并行查询多个索引(例如 `CC-MAIN-2026-17,CC-MAIN-2025-51`)。`latest`(默认值)通过 collinfo.json 解析最新索引。[默认: latest]
--wayback-from <DATE>
将 Wayback Machine 结果限制为 DATE 或之后的快照(格式:YYYY/YYYYMM/YYYYMMDD/YYYYMMDDhhmmss)
--wayback-to <DATE>
将 Wayback Machine 结果限制为 DATE 或之前的快照(格式同 --wayback-from)
--vt-api-key <VT_API_KEY>
VirusTotal 的 API 密钥(可多次使用以实现轮换,也可使用 URX_VT_API_KEY 环境变量以逗号分隔密钥)
--urlscan-api-key <URLSCAN_API_KEY>
Urlscan 的可选 API 密钥;该提供商也可匿名使用(速率限制约 30 请求/分钟/ IP)。可多次使用以实现轮换,或通过 URX_URLSCAN_API_KEY(逗号分隔密钥)
--github-api-key <GITHUB_API_KEY>
GitHub 代码搜索提供商的个人访问令牌(也可读取 URX_GITHUB_API_KEY,逗号分隔实现轮换)
Discovery Options:
--exclude-robots 排除 robots.txt 发现
--exclude-sitemap 排除 sitemap.xml 发现
Display Options:
-v, --verbose 显示详细输出
--silent 静默模式(无输出)
--no-progress 不显示进度条
--show-sources 在输出 URL 上标注返回它们的提供商
--stats 运行结束时向 stderr 打印每个提供商的摘要
Filter Options:
-p, --preset <PRESET>
过滤预设(例如 "no-resources,no-images,no-audio,only-js,only-style")
-e, --extensions <EXTENSIONS>
仅保留具有特定扩展名的 URL(逗号分隔,例如 "js,php,aspx")
--exclude-extensions <EXCLUDE_EXTENSIONS>
排除具有特定扩展名的 URL(逗号分隔,例如 "html,txt")
--patterns <PATTERNS>
仅保留包含特定模式的 URL(逗号分隔)
--exclude-patterns <EXCLUDE_PATTERNS>
排除包含特定模式的 URL(逗号分隔)
--show-only-host
仅显示 URL 的主机部分
--show-only-path
仅显示 URL 的路径部分
--show-only-param
仅显示 URL 的参数部分
--min-length <MIN_LENGTH>
包含的最小 URL 长度
--max-length <MAX_LENGTH>
包含的最大 URL 长度
--strict
强制精确主机验证(默认)
Network Options:
--network-scope <NETWORK_SCOPE> 控制哪些组件应用网络设置(all, providers, testers, 或 providers,testers)[default: all]
--proxy <PROXY> 为 HTTP 请求使用代理(格式:<http://proxy.example.com:8080>)
--proxy-auth <PROXY_AUTH> 代理认证凭据(格式:username:password)
--insecure 跳过 SSL 证书验证(接受自签名证书)
--random-agent 为 HTTP 请求使用随机 User-Agent
--timeout <TIMEOUT> 请求超时时间(秒)[default: 120]
--retries <RETRIES> 失败请求的重试次数 [default: 2]
--parallel <PARALLEL> 每个提供商并发获取的最大域名数(以及并发的 URL 测试);提供商的 --rate-limit 在它们之间共享 [default: 5]
--rate-limit <RATE_LIMIT> 速率限制(每秒请求数)
--rate-limit-by <PAIRS> 按提供商设置的速率覆盖(例如 `vt=1,wayback=10`);未列出的提供商回退到 --rate-limit
--max-time <MAX_TIME> 提供商枚举时间的全局上限(秒)(0 = 无限制)[default: 0]
Testing Options:
--check-status
检查收集到的 URL 的 HTTP 状态码 [aliases: ----cs]
--include-status <INCLUDE_STATUS>
仅保留具有特定 HTTP 状态码或模式的 URL(例如 --is=200,30x)[aliases: ----is]
--exclude-status <EXCLUDE_STATUS>
排除具有特定 HTTP 状态码或模式的 URL(例如 --es=404,50x,5xx)[aliases: ----es]
--extract-links
从收集到的 URL 中提取额外链接(需要 HTTP 请求)
# 将结果保存到文件
urx example.com -o results.txt
# 以 JSON 格式输出
urx example.com -f json -o results.json
# 仅过滤 JavaScript 文件
urx example.com -e js
# 排除 HTML 和文本文件
urx example.com --exclude-extensions html,txt
# 过滤 API 端点
urx example.com --patterns api,v1,graphql
# 排除特定模式
urx example.com --exclude-patterns static,images
# 使用过滤预设(类似于 --exclude-extensions=png,jpg,.....)
urx example.com -p no-images
# 使用特定提供商
urx example.com --providers wayback,otx
# 添加无密钥的 Arquivo.pt(葡萄牙网页归档)提供商
urx example.com --providers wayback,cc,otx,arquivo
# URLScan 无需密钥即可工作(匿名,有速率限制);密钥仅提高限制
urx example.com --providers urlscan
# 使用 VirusTotal 和 URLScan 提供商
# 1. 显式添加到提供商(通过命令行提供 API 密钥)
urx example.com --providers=vt,urlscan --vt-api-key=*** --urlscan-api-key=***
# 2. 使用环境变量提供 API 密钥
URX_VT_API_KEY=*** URX_URLSCAN_API_KEY=*** urx example.com --providers=vt,urlscan
# 3. 自动启用:提供 API 密钥时自动添加提供商
urx example.com --vt-api-key=*** --urlscan-api-key=*** # 无需在 --providers 中指定
# 4. 多个 API 密钥轮换(以缓解速率限制)
# 使用重复标志提供多个密钥
urx example.com --vt-api-key=key1 --vt-api-key=key2 --vt-api-key=key3
# 使用环境变量,逗号分隔密钥
URX_VT_API_KEY=key1,key2,key3 URX_URLSCAN_API_KEY=ukey1,ukey2 urx example.com
# 结合 CLI 标志和环境变量(CLI 密钥优先使用)
URX_VT_API_KEY=env_key1,env_key2 urx example.com --vt-api-key=cli_key1 --vt-api-key=cli_key2
# 默认包含 robots.txt 和 sitemap.xml 中的 URL
# 排除 robots.txt 中的 URL
urx example.com --exclude-robots
# 排除 sitemap 中的 URL
urx example.com --exclude-sitemap
# 包含子域名
urx example.com --subs
# 检查收集到的 URL 的状态
urx example.com --check-status
# 直接从文本文件读取 URL
urx --files urls.txt
# 文件输入与过滤结合
urx --files urls.txt --patterns api,admin -f json
# 从收集到的 URL 中提取额外链接
urx example.com --extract-links
# 网络配置
urx example.com --proxy http://localhost:8080 --timeout 60 --parallel 10 --insecure
# 高级过滤
urx example.com -e js,php --patterns admin,login --exclude-patterns logout,static --min-length 20
# 基于 HTTP 状态码的过滤
urx example.com --include-status 200,30x,405 --exclude-status 20x
# 禁用主机验证
urx example.com --strict false
# URL 规范化和去重
# 通过对查询参数排序和移除尾部斜杠来规范化 URL
urx example.com --normalize-url
# 结合规范化和端点合并以实现全面去重
urx example.com --normalize-url --merge-endpoint
# 文件输入时的 URL 规范化
urx --files urls.txt --normalize-url
Urx 支持缓存以提高重复扫描的性能,以及增量扫描以仅发现新 URL。
# 启用 SQLite 缓存(默认)
urx example.com --cache-type sqlite --cache-path ~/.urx/cache.db
# 使用 Redis 进行分布式缓存
urx example.com --cache-type redis --redis-url redis://localhost:6379
# 增量扫描 - 仅显示自上次扫描以来的新 URL
urx example.com --incremental
# 设置缓存 TTL(生存时间)为 12 小时
urx example.com --cache-ttl 43200
# 完全禁用缓存
urx example.com --no-cache
# 增量扫描与过滤结合
urx example.com --incremental -e js,php --patterns api
# 包含缓存设置的配置文件
urx -c example/config.toml example.com
# 每日监控 - 仅在新 URL 时发出警报
urx target.com --incremental --silent | notify-tool
# 高效处理域名列表
cat domains.txt | urx --incremental --cache-ttl 3600 > new_urls.txt
# 使用 Redis 的分布式团队扫描
urx example.com --cache-type redis --redis-url redis://shared-cache:6379
# 开发过程中的快速重新扫描
urx test-domain.com --cache-ttl 300 # 5 分钟缓存,用于快速迭代
Urx 可以很好地与其他安全及侦察工具配合使用:
# 查找域名,然后发现 URL
echo "example.com" | urx | grep "login" > potential_targets.txt
# 与其他工具结合
cat domains.txt | urx --patterns api | other-tool
Urx 的灵感来源于 gau (GetAllUrls),该工具从 AlienVault 的开放式威胁交换、Wayback Machine 和 Common Crawl 中获取已知 URL。虽然核心功能相似,但 Urx 使用 Rust 从头构建,专注于性能、并发性和扩展的过滤能力。
Urx 是一个开源项目,用 ❤️ 制作而成。 如果你想为此项目做贡献,请查看 CONTRIBUTING.md 并使用你的精彩内容提交 Pull Request。