
Estrae URL dagli archivi OSINT per approfondimenti sulla sicurezza
Estrae URL da archivi OSINT per approfondimenti sulla sicurezza.
Urx è uno strumento da riga di comando progettato per raccogliere URL da archivi OSINT, come Wayback Machine e Common Crawl. Costruito con Rust per l'efficienza, sfrutta l'elaborazione asincrona per interrogare rapidamente molteplici fonti di dati. Questo strumento semplifica il processo di raccolta delle informazioni sugli URL per un dominio specificato, fornendo un dataset completo che può essere utilizzato per vari scopi, inclusi test di sicurezza e analisi.

# 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
Il binario compilato sarà disponibile in target/release/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]...
Arguments:
[DOMAINS]... Domini per cui recuperare URL
Options:
-c, --config <CONFIG> File di configurazione da caricare
--provider-config <PATH> File di configurazione del provider separato che contiene solo le chiavi API (default: $XDG_CONFIG_HOME/urx/provider-config.toml). CLI/env > provider-config > config principale.
-h, --help Mostra aiuto
-V, --version Mostra versione
Input Options:
--files <FILES>... Leggi URL direttamente da file (supporta WARC, file compressi URLTeam e file di testo)
--domain-list <PATH> File di domini separati da newline da scansionare (ripetibile; unito con DOMAINS posizionali e stdin; commenti `#` consentiti)
Output Options:
-o, --output <OUTPUT> File di output in cui scrivere i risultati
--output-dir <PATH> Scrivi un file per dominio in questa directory (l'estensione corrisponde a --format). Coesiste con --output / stdout.
-f, --format <FORMAT> Formato di output (es. "plain", "json", "csv") [default: plain]
--merge-endpoint Unisci endpoint con lo stesso percorso e unisci i parametri URL
--normalize-url Normalizza gli URL per una migliore deduplicazione (ordina i parametri di query, rimuove gli slash finali)
Provider Options:
--providers <PROVIDERS>
Provider da utilizzare (separati da virgola, es. "wayback,cc,otx,arquivo,vt,urlscan") [default: wayback,cc,otx]
--exclude-providers <EXCLUDE_PROVIDERS>
Provider da escludere (separati da virgola). Vince in caso di conflitto con --providers / --all-providers.
--all-providers
Abilita tutti i provider supportati. I provider con chiave API si attivano solo quando una chiave è disponibile.
--list-providers
Elenca tutti i provider supportati ed esci.
--subs
Includi sottodomini durante la ricerca
--cc-index <CC_INDEX>
Indice Common Crawl da utilizzare; accetta elenco separato da virgole per interrogare più indici in parallelo (es. `CC-MAIN-2026-17,CC-MAIN-2025-51`). `latest` (default) risolve il più recente tramite collinfo.json. [default: latest]
--wayback-from <DATE>
Limita i risultati di Wayback Machine agli snapshot in o dopo DATA (YYYY/YYYYMM/YYYYMMDD/YYYYMMDDhhmmss)
--wayback-to <DATE>
Limita i risultati di Wayback Machine agli snapshot in o prima di DATA (stesso formato di --wayback-from)
--vt-api-key <VT_API_KEY>
Chiave API per VirusTotal (può essere usata più volte per rotazione, può anche usare la variabile d'ambiente URX_VT_API_KEY con chiavi separate da virgola)
--urlscan-api-key <URLSCAN_API_KEY>
Chiave API opzionale per Urlscan; il provider funziona anche in anonimo (limitato a ~30 req/min per IP). Può essere usata più volte per rotazione, o tramite URX_URLSCAN_API_KEY (chiavi separate da virgola)
--github-api-key <GITHUB_API_KEY>
Token di accesso personale per il provider GitHub Code Search (legge anche URX_GITHUB_API_KEY, separato da virgole per rotazione)
Discovery Options:
--exclude-robots Escludi scoperta di robots.txt
--exclude-sitemap Escludi scoperta di sitemap.xml
Display Options:
-v, --verbose Mostra output dettagliato
--silent Modalità silenziosa (nessun output)
--no-progress Nessuna barra di avanzamento
--show-sources Annota gli URL di output con i provider che li hanno restituiti
--stats Stampa un riepilogo per provider su stderr al termine dell'esecuzione
Filter Options:
-p, --preset <PRESET>
Preset di filtro (es. "no-resources,no-images,no-audio,only-js,only-style")
-e, --extensions <EXTENSIONS>
Filtra gli URL per includere solo quelli con estensioni specifiche (separate da virgola, es. "js,php,aspx")
--exclude-extensions <EXCLUDE_EXTENSIONS>
Filtra gli URL per escludere quelli con estensioni specifiche (separate da virgola, es. "html,txt")
--patterns <PATTERNS>
Filtra gli URL per includere solo quelli contenenti pattern specifici (separati da virgola)
--exclude-patterns <EXCLUDE_PATTERNS>
Filtra gli URL per escludere quelli contenenti pattern specifici (separati da virgola)
--show-only-host
Mostra solo la parte host degli URL
--show-only-path
Mostra solo la parte path degli URL
--show-only-param
Mostra solo la parte dei parametri degli URL
--min-length <MIN_LENGTH>
Lunghezza minima dell'URL da includere
--max-length <MAX_LENGTH>
Lunghezza massima dell'URL da includere
--strict
Applica validazione esatta dell'host (default)
Network Options:
--network-scope <NETWORK_SCOPE> Controlla a quali componenti si applicano le impostazioni di rete (all, providers, testers, o providers,testers) [default: all]
--proxy <PROXY> Usa proxy per richieste HTTP (formato: <http://proxy.example.com:8080>)
--proxy-auth <PROXY_AUTH> Credenziali di autenticazione proxy (formato: username:password)
--insecure Salta la verifica del certificato SSL (accetta certificati autofirmati)
--random-agent Usa un User-Agent casuale per le richieste HTTP
--timeout <TIMEOUT> Timeout richiesta in secondi [default: 120]
--retries <RETRIES> Numero di tentativi per richieste fallite [default: 2]
--parallel <PARALLEL> Numero massimo di domini recuperati contemporaneamente per provider (e test URL simultanei); il --rate-limit di un provider è condiviso tra di essi [default: 5]
--rate-limit <RATE_LIMIT> Limite di velocità (richieste al secondo)
--rate-limit-by <PAIRS> Override dei limiti di velocità per provider (es. `vt=1,wayback=10`); si basa su --rate-limit per i provider non elencati
--max-time <MAX_TIME> Limite massimo globale sul tempo di enumerazione del provider in secondi (0 = illimitato) [default: 0]
Testing Options:
--check-status
Controlla il codice di stato HTTP degli URL raccolti [alias: ----cs]
--include-status <INCLUDE_STATUS>
Includi URL con codici di stato HTTP o pattern specifici (es. --is=200,30x) [alias: ----is]
--exclude-status <EXCLUDE_STATUS>
Escludi URL con codici di stato HTTP o pattern specifici (es. --es=404,50x,5xx) [alias: ----es]
--extract-links
Estrai link aggiuntivi dagli URL raccolti (richiede richieste HTTP)
# Save results to a file
urx example.com -o results.txt
# Output in JSON format
urx example.com -f json -o results.json
# Filter for JavaScript files only
urx example.com -e js
# Exclude HTML and text files
urx example.com --exclude-extensions html,txt
# Filter for API endpoints
urx example.com --patterns api,v1,graphql
# Exclude specific patterns
urx example.com --exclude-patterns static,images
# Use Fileter Preset (similar to --exclude-extensions=png,jpg,.....)
urx example.com -p no-images
# Use specific providers
urx example.com --providers wayback,otx
# Add the keyless Arquivo.pt (Portuguese web archive) provider
urx example.com --providers wayback,cc,otx,arquivo
# URLScan works without a key (anonymous, rate-limited); a key just raises limits
urx example.com --providers urlscan
# Using VirusTotal and URLScan providers
# 1. Explicitly add to providers (with API keys via command line)
urx example.com --providers=vt,urlscan --vt-api-key=*** --urlscan-api-key=***
# 2. Using environment variables for API keys
URX_VT_API_KEY=*** URX_URLSCAN_API_KEY=*** urx example.com --providers=vt,urlscan
# 3. Auto-enabling: providers are automatically added when API keys are provided
urx example.com --vt-api-key=*** --urlscan-api-key=*** # No need to specify in --providers
# 4. Multiple API key rotation (to mitigate rate limits)
# Using repeated flags for multiple keys
urx example.com --vt-api-key=key1 --vt-api-key=key2 --vt-api-key=key3
# Using environment variables with comma-separated keys
URX_VT_API_KEY=key1,key2,key3 URX_URLSCAN_API_KEY=ukey1,ukey2 urx example.com
# Combining CLI flags and environment variables (CLI keys are used first)
URX_VT_API_KEY=env_key1,env_key2 urx example.com --vt-api-key=cli_key1 --vt-api-key=cli_key2
# URLs from robots.txt and sitemap.xml are included by default
# Exclude URLs from robots.txt files
urx example.com --exclude-robots
# Exclude URLs from sitemap
urx example.com --exclude-sitemap
# Include subdomains
urx example.com --subs
# Check status of collected URLs
urx example.com --check-status
# Read URLs directly from a text file
urx --files urls.txt
# Combine file input with filtering
urx --files urls.txt --patterns api,admin -f json
# Extract additional links from collected URLs
urx example.com --extract-links
# Network configuration
urx example.com --proxy http://localhost:8080 --timeout 60 --parallel 10 --insecure
# Advanced filtering
urx example.com -e js,php --patterns admin,login --exclude-patterns logout,static --min-length 20
# HTTP Status code based filtering
urx example.com --include-status 200,30x,405 --exclude-status 20x
# Disable host validation
urx example.com --strict false
# URL normalization and deduplication
# Normalize URLs by sorting query parameters and removing trailing slashes
urx example.com --normalize-url
# Combine normalization with endpoint merging for comprehensive deduplication
urx example.com --normalize-url --merge-endpoint
# URL normalization with file input
urx --files urls.txt --normalize-url
Urx supporta la cache per migliorare le prestazioni nelle scansioni ripetute e la scansione incrementale per scoprire solo nuovi URL.
# Enable caching with SQLite (default)
urx example.com --cache-type sqlite --cache-path ~/.urx/cache.db
# Use Redis for distributed caching
urx example.com --cache-type redis --redis-url redis://localhost:6379
# Incremental scanning - only show new URLs since last scan
urx example.com --incremental
# Set cache TTL (time-to-live) to 12 hours
urx example.com --cache-ttl 43200
# Disable caching entirely
urx example.com --no-cache
# Combine incremental scanning with filters
urx example.com --incremental -e js,php --patterns api
# Configuration file with caching settings
urx -c example/config.toml example.com
# Daily monitoring - only alert on new URLs
urx target.com --incremental --silent | notify-tool
# Efficient domain lists processing
cat domains.txt | urx --incremental --cache-ttl 3600 > new_urls.txt
# Distributed team scanning with Redis
urx example.com --cache-type redis --redis-url redis://shared-cache:6379
# Fast re-scans during development
urx test-domain.com --cache-ttl 300 # 5-minute cache for rapid iterations
Urx funziona bene in pipeline con altri strumenti di sicurezza e ricognizione:
# Find domains, then discover URLs
echo "example.com" | urx | grep "login" > potential_targets.txt
# Combine with other tools
cat domains.txt | urx --patterns api | other-tool
Urx è stato ispirato da gau (GetAllUrls), uno strumento che recupera URL noti da AlienVault Open Threat Exchange, Wayback Machine e Common Crawl. Pur condividendo funzionalità di base simili, Urx è stato costruito da zero in Rust con un focus su prestazioni, concorrenza e capacità di filtraggio ampliate.
Urx è un progetto open source ed è realizzato con ❤️ se vuoi contribuire a questo progetto, consulta CONTRIBUTING.md e fai una Pull-Request con i tuoi fantastici contenuti.