
Извлекает URL-адреса из архивов OSINT для аналитики безопасности
Извлекает URL из OSINT-архивов для анализа безопасности.
Urx — это инструмент командной строки, предназначенный для сбора URL из OSINT-архивов, таких как Wayback Machine и Common Crawl. Создан на 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/env > provider-config > main config.
-h, --help Показать справку
-V, --version Показать версию
Параметры ввода:
--files <FILES>... Чтение URL напрямую из файлов (поддерживаются WARC, сжатые файлы URLTeam и текстовые файлы)
--domain-list <PATH> Файл с доменами, разделёнными переводами строк (повторяемый; объединяется с позиционными DOMAINS и stdin; допускаются комментарии с `#`)
Параметры вывода:
-o, --output <OUTPUT> Файл для записи результатов
--output-dir <PATH> Запись одного файла на домен в указанную директорию (расширение соответствует --format). Совместим с --output / stdout.
-f, --format <FORMAT> Формат вывода (например, "plain", "json", "csv") [по умолчанию: plain]
--merge-endpoint Объединение конечных точек с одинаковым путём и слияние параметров URL
--normalize-url Нормализация URL для лучшей дедупликации (сортировка параметров запроса, удаление завершающих слешей)
Параметры провайдеров:
--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>
API-ключ для VirusTotal (можно использовать несколько раз для ротации, также можно задать через переменную окружения URX_VT_API_KEY с ключами через запятую)
--urlscan-api-key <URLSCAN_API_KEY>
Опциональный API-ключ для Urlscan; провайдер также работает анонимно (ограничение ~30 запросов/мин на IP). Можно использовать несколько раз для ротации, или через URX_URLSCAN_API_KEY (ключи через запятую)
--github-api-key <GITHUB_API_KEY>
Персональный токен доступа для провайдера GitHub Code Search (также читается из URX_GITHUB_API_KEY, через запятую для ротации)
Параметры обнаружения:
--exclude-robots Исключить обнаружение robots.txt
--exclude-sitemap Исключить обнаружение sitemap.xml
Параметры отображения:
-v, --verbose Подробный вывод
--silent Тихий режим (без вывода)
--no-progress Без индикатора прогресса
--show-sources Пометить выходные URL именами провайдеров, которые их вернули
--stats Вывести сводку по каждому провайдеру в stderr по окончании работы
Параметры фильтрации:
-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-scope <NETWORK_SCOPE> Управление, к каким компонентам применяются сетевые настройки (all, providers, testers или providers,testers) [по умолчанию: all]
--proxy <PROXY> Использовать прокси для HTTP-запросов (формат: <http://proxy.example.com:8080>)
--proxy-auth <PROXY_AUTH> Учётные данные для аутентификации прокси (формат: username:password)
--insecure Пропустить проверку SSL-сертификата (принимать самоподписанные сертификаты)
--random-agent Использовать случайный User-Agent для HTTP-запросов
--timeout <TIMEOUT> Тайм-аут запроса в секундах [по умолчанию: 120]
--retries <RETRIES> Количество повторных попыток для неудавшихся запросов [по умолчанию: 2]
--parallel <PARALLEL> Максимальное количество доменов, обрабатываемых параллельно на один провайдер (и параллельные тесты URL); настройка --rate-limit провайдера делится между ними [по умолчанию: 5]
--rate-limit <RATE_LIMIT> Ограничение скорости (запросов в секунду)
--rate-limit-by <PAIRS> Переопределение ограничения скорости для отдельных провайдеров (например, `vt=1,wayback=10`); для неперечисленных провайдеров используется --rate-limit
--max-time <MAX_TIME> Глобальное ограничение времени перечисления провайдеров в секундах (0 = без ограничений) [по умолчанию: 0]
Параметры тестирования:
--check-status
Проверить HTTP-статус собранных URL [алиасы: ----cs]
--include-status <INCLUDE_STATUS>
Включить URL с определёнными HTTP-статусами или шаблонами (например, --is=200,30x) [алиасы: ----is]
--exclude-status <EXCLUDE_STATUS>
Исключить URL с определёнными HTTP-статусами или шаблонами (например, --es=404,50x,5xx) [алиасы: ----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
# URL из robots.txt и sitemap.xml включены по умолчанию
# Исключение URL из файлов robots.txt
urx example.com --exclude-robots
# Исключение URL из sitemap
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) — инструментом, который получает известные URL из AlienVault's Open Threat Exchange, Wayback Machine и Common Crawl. Хотя Urx имеет схожую базовую функциональность, он был написан с нуля на Rust с акцентом на производительность, параллелизм и расширенные возможности фильтрации.
Urx — это проект с открытым исходным кодом, сделанный с ❤️. Если вы хотите внести вклад в этот проект, пожалуйста, ознакомьтесь с CONTRIBUTING.md и отправляйте Pull-Request с вашими крутыми идеями.