
新发布Sep 19, 2026
urx v0.11.0
从 OSINT 档案中提取 URL,用于安全洞察
从 OSINT 档案中提取 URL,助力安全洞察。
Urx 从 Wayback Machine 和 Common Crawl 等 OSINT 档案中收集某个域名的 URL。它会并行查询每个来源,然后对结果进行过滤、测试和格式化,以供安全工作使用。
功能特性
- 无需密钥的来源:Wayback Machine、Common Crawl、OTX、Arquivo.pt、URLScan(匿名)
- 需要密钥且支持密钥轮换的来源:VirusTotal、URLScan、ZoomEye、GitHub Code Search、BeVigil(来自 Android 应用的 URL)
- 通过
--cdx-endpoint支持任何其他 CDX 服务器(pywb、OutbackCDX、国家档案馆) - 档案侧过滤器(
--from/--to、--archive-status、--archive-mime)在 CDX 查询内部执行 - 客户端元数据过滤器(
--meta-*),针对捕获日期、MIME 类型和状态,适用于所有提供方 - 路径范围目标(
urx example.com/shop)和漏洞赏金范围文件(--scope-file) - 按扩展名、子字符串、正则(
--match-regex、--filter-regex)和预设(no-images、only-js、only-secrets、only-backup、only-config、only-api)进行过滤 - 规范化与去重:
--normalize-url、--merge-endpoint、--dedup-similar - 输出为纯文本、JSON、JSON Lines、CSV 或
wordlist;--stream在 URL 到达时即写出 - 参数视图:
--params、--params-by-endpoint、--fuzz-placeholder FUZZ,用于 ffuf 或 dalfox - 每个 URL 的捕获元数据:
first_seen、last_seen、mime、archive_status、digest - 从 WARC、URLTeam 和文本文件(
--files)或 stdin 输入 - 实时测试:
--check-status、--check-title、--extract-links、--extract-js-endpoints - 归档正文:
--archive-body从已不存在的页面中挖掘链接,每个不同正文仅发起一次请求;--archive-body-dir会保留它们 - API 规范扩展(
--expand-specs):OpenAPI 3.x、Swagger 2.0、GraphQL introspection - 归档的 robots.txt 和 sitemap.xml 版本(
--archived-discovery) - 对目标发起认证请求(
-H、--cookie、--user-agent),绝不会发送到档案 - SQLite 或 Redis 缓存(Redis 需要
--features redis-cache构建)、--incremental扫描、urx cache维护以及--notifywebhook

安装
cargo install urx # https://crates.io/crates/urx
brew install urx # https://formulae.brew.sh/formula/urx
yay -S urx # AUR
choco install urx # Chocolatey (Windows)
从源代码(二进制文件位于 target/release/urx):
git clone https://github.com/hahwul/urx.git
cd urx
cargo build --release
Docker(ghcr.io/hahwul/urx)。该镜像没有入口点,因此请将 ./urx 放在镜像名称之后:
docker run --rm ghcr.io/hahwul/urx:latest ./urx example.com
适用于 Linux、macOS 和 Windows 的预编译二进制文件(每个都附带 .sha256 文件)可在 releases 页面 获取。
Shell 补全(bash、zsh、fish、powershell、elvish)以及 man 手册页:
urx --completions zsh > ~/.zfunc/_urx # ~/.zfunc must be on $fpath
urx --completions bash > ~/.local/share/bash-completion/completions/urx
urx --completions fish > ~/.config/fish/completions/urx.fish
urx --manpage > ~/.local/share/man/man1/urx.1
用法
基本用法
urx example.com # one domain
urx example.com example.org # several domains
cat domains.txt | urx # domains from stdin
选项
Usage: urx [OPTIONS] [DOMAINS]... [COMMAND]
Commands:
cache Inspect and maintain the URL cache: stats, list, prune, drop <DOMAIN>..., clear
Arguments:
[DOMAINS]... Domains to fetch URLs for
Options:
-c, --config <CONFIG> Config file to load
--provider-config <PATH> Separate provider config file holding only API keys (default: ~/.config/urx/provider-config.toml; %APPDATA%\urx\ on Windows). CLI/env > provider-config > main config.
--completions <SHELL> Print a shell completion script (bash, zsh, fish, powershell, elvish) to stdout and exit
--manpage Print the roff man page to stdout and exit
-h, --help Print help
-V, --version Print version
Input Options:
--files <FILES>... Read URLs directly from files (supports WARC, URLTeam compressed, and text files)
--domain-list <PATH> File of newline-separated domains to scan (repeatable; merged with positional DOMAINS; stdin is read only when they name no domains; `#` comments allowed) [alias: --dL]
Output Options:
-o, --output <OUTPUT> Output file to write results
--output-dir <PATH> Write one file per URL host into this directory (extension matches --format). Coexists with --output / stdout. [alias: --oD]
-f, --format <FORMAT> Output format: "plain", "json" (one array), "jsonl" (one JSON object per line), "csv", "wordlist" (path segments and parameter names, deduplicated and sorted); anything else is a usage error [default: plain]
--stream Write URLs as each provider reports them instead of once at the end (unsorted; bypasses cache; rejects options needing the full result set)
--merge-endpoint Merge endpoints with the same path and merge URL parameters
--normalize-url Normalize URLs for better deduplication (sorts query parameters, removes trailing slashes)
--dedup-similar Collapse URLs that differ only in variable data (numeric ids, UUIDs, hashes, dates, query values)
--params Replace the URL list with every query parameter name the run saw, once each
--params-by-endpoint
One line per endpoint: the endpoint and the comma-separated union of the parameter names seen on it (id-looking path segments collapse to `{id}`)
--fuzz-placeholder <VALUE>
Replace every query parameter value with VALUE, keeping one URL per parameter signature — output you can feed straight to ffuf or dalfox