
New releaseSep 19, 2026
urx v0.11.0
OSINTアーカイブからURLを抽出してセキュリティインサイトを得る
OSINTアーカイブからURLを抽出し、セキュリティインサイトを得る。
Urxは、Wayback MachineやCommon CrawlなどのOSINTアーカイブからURLを収集するために設計されたコマンドラインツールです。効率性を重視してRustで構築されており、非同期処理を活用して複数のデータソースを迅速にクエリします。このツールは、指定されたドメインのURL情報を収集するプロセスを簡素化し、セキュリティテストや分析など様々な目的に使用できる包括的なデータセットを提供します。
機能
- 複数のソースから並列でURLを取得(Wayback Machine、Common Crawl、OTX、Arquivo.pt)
- 他のあらゆるCDXインデックスサーバーをプラグイン可能 — 各国のウェブアーカイブ、プライベートなpywb、OutbackCDX —
--cdx-endpoint URLでコード変更なしに利用可能 - デフォルトでキー不要:Wayback、Common Crawl、OTX、Arquivo.pt、URLScan(匿名)はすべてAPIキーなしで動作
- BeVigilプロバイダー:展開されたAndroidアプリから抽出されたURL — ウェブアーカイブが決してクロールしなかったエンドポイント
- すべてのキー付きプロバイダー(VirusTotal、URLScan、ZoomEye、GitHub、BeVigil)のAPIキーローテーションによるレート制限の緩和
- 認証付きテスト:
-H、--cookie、--user-agentはurxがターゲットに対して行うすべてのリクエスト(--check-status、--extract-links、--extract-js-endpoints、--expand-specs、およびrobots/sitemapプローブ)に適用され、アーカイブには意図的に一切送信されない - ファイル拡張子、部分文字列パターン、または完全な正規表現(
--match-regex/--filter-regex)による結果のフィルタリング - 定義済みプリセット:ファイルファミリー別("no-images"、"only-js")とセキュリティ関心別("only-secrets"、"only-backup"、"only-config"、"only-api")の両方
- アーカイブ側フィルタリング:ステータスコード、MIMEタイプ、日付範囲をCDXクエリ自体にプッシュするため、フィルタリングされたキャプチャはネットワークを通過しない
- クライアント側メタデータフィルタリング(
--meta-*):収集後に、最初/最後のキャプチャ日、記録されたMIMEタイプ、記録されたステータスをすべてのプロバイダーで統一的にフィルタリング - パススコープ付きターゲット:
urx example.com/shopはスコープをCDXクエリ自体にプッシュする(url=example.com/shop*)ため、大規模サイトのサブツリーはクライアント側でフィルタリングされるのではなく、インデックス全体のごく一部のコストで済む - バグバウンティスコープファイル(
--scope-file):プログラム自身の*.example.com/!admin.example.comリストをそのまま使用し、繰り返し可能で和集合として扱われ、除外が常に優先される - URL正規化と重複排除:クエリパラメータのソート、末尾スラッシュの削除、意味的に同一のURLのマージ、およびid、ハッシュ、日付のみが異なるほぼ重複したURLの統合(
--dedup-similar) - 複数の出力形式のサポート:プレーンテキスト、JSON、JSON Lines、CSV、および
wordlist— ターゲットが構築されるパスセグメントとパラメータ名で、id、ハッシュ、日付は除外される - パラメータとファズビュー:
--params(ターゲット全体のパラメータインベントリ)、--params-by-endpoint(どのエンドポイントが何を受け取るか)、--fuzz-placeholder FUZZ(パラメータシグネチャごとに1つのテンプレート化されたURL、ffufやdalfoxですぐに使用可能) - アーカイブキャプチャメタデータ:
first_seen、last_seen、mime、archive_status、digestが、CDXアーカイブが報告したすべてのURLとともに追加のネットワークコストなしで返される - ストリーミング出力(
--stream):各プロバイダーが報告するたびにURLが書き出されるため、パイプラインは最も遅いアーカイブを待つことなく即座に動作を開始する - 直接ファイル入力のサポート:WARCファイル、URLTeam圧縮ファイル、テキストファイルからURLを直接読み取り
- 結果をコンソールまたはファイルに出力、あるいはパイプライン統合用にstdin経由でストリーミング
- URLテスト:
- HTTPステータスコードとパターンに基づくURLのフィルタリングと検証。
- 収集したURLから追加のリンクを抽出 — アンカー、スクリプト、スタイルシート、フォームアクション、iframe、画像、メディアソース、オブジェクト、埋め込み、メタリフレッシュターゲット
- 収集したURLのアーカイブされたレスポンスボディをマイニング(
--archive-body)するため、もはや存在しないページでも含まれていたリンクを提供する — CDXダイジェストの重複排除により、異なるボディごとに1リクエスト --extract-js-endpointsを使用すると、アーカイブされたJavaScriptもマイニングする:ビルドハッシュで命名されたバンドルはサイトが再デプロイされた瞬間に404になるが、アーカイブはそのAPIサーフェスがまだ存在する唯一の場所である- リプレイされたボディを保持(
--archive-body-dir)し、リンク抽出器が探さないもの — 開発者コメント、インライン化された認証情報、内部ホスト名 — をgrepするためのコーパスとして、追加リクエストなしで利用 - API仕様の展開(
--expand-specs):OpenAPI 3.x、Swagger 2.0、GraphQLイントロスペクションドキュメント(JSONまたはYAML)を、それらが記述するすべてのルートに変換 — 1リクエストでドキュメント化されたサーフェス全体を取得 - レスポンスメタデータ:
--check-statusはLocation、Content-Length、Content-Typeも記録し、--check-titleはHTMLの<title>を追加する
- アーカイブされたrobots.txtとsitemap.xmlの発見(
--archived-discovery):Wayback Machineが保持するすべての異なるバージョンにより、2015年のDisallow:が、サイトがそれ以降言及しなくなったパスを今も示している - キャッシュとインクリメンタルスキャン:
- ローカルSQLiteまたはリモートRedisキャッシュによるドメインの再スキャン回避(Redisは
--features redis-cache付きのビルドが必要。パッケージ版ビルドには含まれない) - 前回のスキャン以降の新規URLのみを発見するインクリメンタルモード
- 設定可能なキャッシュTTL。各スキャンはTTLの2倍より古いエントリを掃除し、
urx cache pruneはそれを超えたものを削除する - キャッシュを検査・保守する
urx cacheサブコマンド:stats、list、prune、drop <domain>、clear
- ローカルSQLiteまたはリモートRedisキャッシュによるドメインの再スキャン回避(Redisは

インストール
Cargoから
# https://crates.io/crates/urx
cargo install urx
Homebrew から
# 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 に生成されます。
Docker から
docker pull ghcr.io/hahwul/urx:latest
# the image has no entrypoint, so name the binary before its arguments
docker run --rm ghcr.io/hahwul/urx:latest ./urx example.com
AUR から
yay -S urx
Chocolatey から(Windows)
choco install urx
GitHub Releases から
Linux、macOS、Windows 用のビルド済みバイナリ(それぞれ .sha256 付き)が
すべての release に添付されています。
シェル補完
urx は自身の補完スクリプトを生成するため、実際にインストールされている
バイナリのフラグと常に一致します。
# zsh — any directory on your $fpath works
urx --completions zsh > ~/.zfunc/_urx
# (make sure ~/.zfunc is on the fpath, then `compinit`)
# bash
urx --completions bash > ~/.local/share/bash-completion/completions/urx
# fish
urx --completions fish > ~/.config/fish/completions/urx.fish
powershell と elvish もサポートされています。このフラグにはターゲットドメインは不要です。
Man ページ
urx --manpage > ~/.local/share/man/man1/urx.1
man urx
使用方法
基本的な使用方法
# Scan a single domain
urx example.com
# Scan multiple domains
urx example.com example.org
# Scan domains from a file
cat domains.txt | urx
オプション
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]