
Extrai URLs de Arquivos de OSINT para Insights de Segurança
Extrai URLs de Arquivos OSINT para Insights de Segurança.
Urx é uma ferramenta de linha de comando projetada para coletar URLs de arquivos OSINT, como o Wayback Machine e o Common Crawl. Construída em Rust para eficiência, ela utiliza processamento assíncrono para consultar rapidamente múltiplas fontes de dados. Esta ferramenta simplifica o processo de coleta de informações de URLs para um domínio especificado, fornecendo um conjunto de dados abrangente que pode ser usado para diversos fins, incluindo testes de segurança e análise.

# 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
O binário compilado estará disponível em target/release/urx.
# Escanear um único domínio
urx example.com
# Escanear múltiplos domínios
urx example.com example.org
# Escanear domínios a partir de um arquivo
cat domains.txt | urx
Usage: urx [OPTIONS] [DOMAINS]...
Arguments:
[DOMAINS]... Domínios para buscar as URLs
Options:
-c, --config <CONFIG> Arquivo de configuração a ser carregado
--provider-config <PATH> Arquivo de configuração separado do provedor contendo apenas chaves de API (padrão: $XDG_CONFIG_HOME/urx/provider-config.toml). CLI/env > provider-config > config principal.
-h, --help Exibe ajuda
-V, --version Exibe a versão
Input Options:
--files <FILES>... Lê URLs diretamente de arquivos (suporta arquivos WARC, URLTeam compactados e texto)
--domain-list <PATH> Arquivo com domínios separados por linha para escanear (repetível; mesclado com DOMAINS posicionais e stdin; comentários `#` permitidos)
Output Options:
-o, --output <OUTPUT> Arquivo de saída para escrever os resultados
--output-dir <PATH> Escreve um arquivo por domínio neste diretório (extensão corresponde a --format). Coexiste com --output / stdout.
-f, --format <FORMAT> Formato de saída (ex.: "plain", "json", "csv") [padrão: plain]
--merge-endpoint Mescla endpoints com o mesmo caminho e mescla parâmetros de URL
--normalize-url Normaliza URLs para melhor deduplicação (ordena parâmetros de consulta, remove barras finais)
Provider Options:
--providers <PROVIDERS>
Provedores a serem usados (separados por vírgulas, ex.: "wayback,cc,otx,arquivo,vt,urlscan") [padrão: wayback,cc,otx]
--exclude-providers <EXCLUDE_PROVIDERS>
Provedores a serem excluídos (separados por vírgulas). Vence em conflito com --providers / --all-providers.
--all-providers
Ativa todos os provedores suportados. Provedores com chave de API só são ativados quando uma chave está disponível.
--list-providers
Lista todos os provedores suportados e sai.
--subs
Incluir subdomínios na busca
--cc-index <CC_INDEX>
Índice do Common Crawl a ser usado; aceita lista separada por vírgulas para consultar múltiplos índices em paralelo (ex.: `CC-MAIN-2026-17,CC-MAIN-2025-51`). `latest` (padrão) resolve o mais recente via collinfo.json. [padrão: latest]
--wayback-from <DATE>
Restringe os resultados do Wayback Machine a snapshots a partir de ou após DATA (YYYY/YYYYMM/YYYYMMDD/YYYYMMDDhhmmss)
--wayback-to <DATE>
Restringe os resultados do Wayback Machine a snapshots em ou antes de DATA (mesmo formato de --wayback-from)
--vt-api-key <VT_API_KEY>
Chave de API para o VirusTotal (pode ser usada várias vezes para rotação; também pode usar a variável de ambiente URX_VT_API_KEY com chaves separadas por vírgula)
--urlscan-api-key <URLSCAN_API_KEY>
Chave de API opcional para Urlscan; o provedor também funciona anonimamente (limitado a ~30 req/min por IP). Pode ser usado várias vezes para rotação, ou via URX_URLSCAN_API_KEY (chaves separadas por vírgula)
--github-api-key <GITHUB_API_KEY>
Token de acesso pessoal para o provedor GitHub Code Search (também lê URX_GITHUB_API_KEY, separado por vírgulas para rotação)
Discovery Options:
--exclude-robots Excluir descoberta de robots.txt
--exclude-sitemap Excluir descoberta de sitemap.xml
Display Options:
-v, --verbose Exibe saída detalhada
--silent Modo silencioso (sem saída)
--no-progress Sem barra de progresso
--show-sources Anota as URLs de saída com os provedores que as retornaram
--stats Imprime um resumo por provedor no stderr ao final da execução
Filter Options:
-p, --preset <PRESET>
Predefinições de filtro (ex.: "no-resources,no-images,no-audio,only-js,only-style")
-e, --extensions <EXTENSIONS>
Filtra URLs para incluir apenas aquelas com extensões específicas (separadas por vírgulas, ex.: "js,php,aspx")
--exclude-extensions <EXCLUDE_EXTENSIONS>
Filtra URLs para excluir aquelas com extensões específicas (separadas por vírgulas, ex.: "html,txt")
--patterns <PATTERNS>
Filtra URLs para incluir apenas aquelas contendo padrões específicos (separados por vírgulas)
--exclude-patterns <EXCLUDE_PATTERNS>
Filtra URLs para excluir aquelas contendo padrões específicos (separados por vírgulas)
--show-only-host
Mostra apenas a parte do host das URLs
--show-only-path
Mostra apenas a parte do caminho das URLs
--show-only-param
Mostra apenas a parte dos parâmetros das URLs
--min-length <MIN_LENGTH>
Comprimento mínimo da URL para incluir
--max-length <MAX_LENGTH>
Comprimento máximo da URL para incluir
--strict
Aplica validação exata de host (padrão)
Network Options:
--network-scope <NETWORK_SCOPE> Controla a quais componentes as configurações de rede se aplicam (all, providers, testers ou providers,testers) [padrão: all]
--proxy <PROXY> Usa proxy para requisições HTTP (formato: <http://proxy.example.com:8080>)
--proxy-auth <PROXY_AUTH> Credenciais de autenticação do proxy (formato: usuário:senha)
--insecure Ignora verificação de certificado SSL (aceita certificados autoassinados)
--random-agent Usa um User-Agent aleatório para requisições HTTP
--timeout <TIMEOUT> Tempo limite de requisição em segundos [padrão: 120]
--retries <RETRIES> Número de tentativas para requisições com falha [padrão: 2]
--parallel <PARALLEL> Número máximo de domínios buscados simultaneamente por provedor (e testes de URL simultâneos); o --rate-limit de um provedor é compartilhado entre eles [padrão: 5]
--rate-limit <RATE_LIMIT> Limite de taxa (requisições por segundo)
--rate-limit-by <PAIRS> Substituições de taxa por provedor (ex.: `vt=1,wayback=10`); usa --rate-limit como fallback para provedores não listados
--max-time <MAX_TIME> Limite global de tempo de enumeração do provedor em segundos (0 = ilimitado) [padrão: 0]
Testing Options:
--check-status
Verifica o código de status HTTP das URLs coletadas [aliases: ----cs]
--include-status <INCLUDE_STATUS>
Inclui URLs com códigos de status HTTP ou padrões específicos (ex.: --is=200,30x) [aliases: ----is]
--exclude-status <EXCLUDE_STATUS>
Exclui URLs com códigos de status HTTP ou padrões específicos (ex.: --es=404,50x,5xx) [aliases: ----es]
--extract-links
Extrai links adicionais das URLs coletadas (requer requisições HTTP)
# Salvar resultados em um arquivo
urx example.com -o results.txt
# Saída no formato JSON
urx example.com -f json -o results.json
# Filtrar apenas arquivos JavaScript
urx example.com -e js
# Excluir arquivos HTML e de texto
urx example.com --exclude-extensions html,txt
# Filtrar por endpoints de API
urx example.com --patterns api,v1,graphql
# Excluir padrões específicos
urx example.com --exclude-patterns static,images
# Usar predefinição de filtro (similar a --exclude-extensions=png,jpg,.....)
urx example.com -p no-images
# Usar provedores específicos
urx example.com --providers wayback,otx
# Adicionar o provedor Arquivo.pt (arquivo web português) sem chave
urx example.com --providers wayback,cc,otx,arquivo
# URLScan funciona sem chave (anônimo, limitado); uma chave apenas aumenta os limites
urx example.com --providers urlscan
# Usando os provedores VirusTotal e URLScan
# 1. Adicionar explicitamente aos provedores (com chaves de API via linha de comando)
urx example.com --providers=vt,urlscan --vt-api-key=*** --urlscan-api-key=***
# 2. Usando variáveis de ambiente para chaves de API
URX_VT_API_KEY=*** URX_URLSCAN_API_KEY=*** urx example.com --providers=vt,urlscan
# 3. Ativação automática: provedores são adicionados automaticamente quando as chaves de API são fornecidas
urx example.com --vt-api-key=*** --urlscan-api-key=*** # Não é necessário especificar em --providers
# 4. Rotação de múltiplas chaves de API (para mitigar limites de taxa)
# Usando flags repetidas para múltiplas chaves
urx example.com --vt-api-key=chave1 --vt-api-key=chave2 --vt-api-key=chave3
# Usando variáveis de ambiente com chaves separadas por vírgula
URX_VT_API_KEY=chave1,chave2,chave3 URX_URLSCAN_API_KEY=uchave1,uchave2 urx example.com
# Combinando flags de CLI e variáveis de ambiente (chaves da CLI são usadas primeiro)
URX_VT_API_KEY=env_chave1,env_chave2 urx example.com --vt-api-key=cli_chave1 --vt-api-key=cli_chave2
# URLs de robots.txt e sitemap.xml são incluídas por padrão
# Excluir URLs de arquivos robots.txt
urx example.com --exclude-robots
# Excluir URLs de sitemap
urx example.com --exclude-sitemap
# Incluir subdomínios
urx example.com --subs
# Verificar status das URLs coletadas
urx example.com --check-status
# Ler URLs diretamente de um arquivo de texto
urx --files urls.txt
# Combinar entrada de arquivo com filtragem
urx --files urls.txt --patterns api,admin -f json
# Extrair links adicionais das URLs coletadas
urx example.com --extract-links
# Configuração de rede
urx example.com --proxy http://localhost:8080 --timeout 60 --parallel 10 --insecure
# Filtragem avançada
urx example.com -e js,php --patterns admin,login --exclude-patterns logout,static --min-length 20
# Filtragem baseada em código de status HTTP
urx example.com --include-status 200,30x,405 --exclude-status 20x
# Desabilitar validação de host
urx example.com --strict false
# Normalização e deduplicação de URLs
# Normalizar URLs ordenando parâmetros de consulta e removendo barras finais
urx example.com --normalize-url
# Combinar normalização com mesclagem de endpoints para deduplicação abrangente
urx example.com --normalize-url --merge-endpoint
# Normalização de URLs com entrada de arquivo
urx --files urls.txt --normalize-url
Urx suporta cache para melhorar o desempenho em varreduras repetidas e varredura incremental para descobrir apenas novas URLs.
# Ativar cache com SQLite (padrão)
urx example.com --cache-type sqlite --cache-path ~/.urx/cache.db
# Usar Redis para cache distribuído
urx example.com --cache-type redis --redis-url redis://localhost:6379
# Varredura incremental - mostrar apenas novas URLs desde a última varredura
urx example.com --incremental
# Definir TTL do cache (tempo de vida) como 12 horas
urx example.com --cache-ttl 43200
# Desabilitar cache completamente
urx example.com --no-cache
# Combinar varredura incremental com filtros
urx example.com --incremental -e js,php --patterns api
# Arquivo de configuração com configurações de cache
urx -c example/config.toml example.com
# Monitoramento diário - alertar apenas sobre novas URLs
urx target.com --incremental --silent | notify-tool
# Processamento eficiente de listas de domínios
cat domains.txt | urx --incremental --cache-ttl 3600 > new_urls.txt
# Varredura em equipe distribuída com Redis
urx example.com --cache-type redis --redis-url redis://shared-cache:6379
# Re-varreduras rápidas durante o desenvolvimento
urx test-domain.com --cache-ttl 300 # Cache de 5 minutos para iterações rápidas
Urx funciona bem em pipelines com outras ferramentas de segurança e reconhecimento:
# Encontrar domínios, depois descobrir URLs
echo "example.com" | urx | grep "login" > potential_targets.txt
# Combinar com outras ferramentas
cat domains.txt | urx --patterns api | outra-ferramenta
Urx foi inspirado por gau (GetAllUrls), uma ferramenta que busca URLs conhecidas do AlienVault's Open Threat Exchange, do Wayback Machine e do Common Crawl. Embora compartilhe funcionalidades principais semelhantes, Urx foi construído do zero em Rust com foco em desempenho, concorrência e capacidades expandidas de filtragem.
Urx é um projeto de código aberto e foi feito com ❤️ se você quiser contribuir com este projeto, por favor veja CONTRIBUTING.md e faça um Pull-Request com seu conteúdo legal.