
Strumento OSINT che rileva domain squatting, typosquatting e siti phishing simili, monitorando i domini di nuova registrazione rispetto a parole chiave del brand con validazione DNS e VT.
openSquat è uno strumento di sicurezza OSINT (Open Source Intelligence) che identifica minacce di cybersquatting mirate al tuo marchio o ai tuoi domini:
"Un potente coltellino svizzero per la protezione del marchio" — Blog WhoisXML API, agosto 2022
"Uno strumento con un potere pazzesco per combattere il typosquatting e tutti i tipi correlati di malefatte informatiche." — Blog WhoisXML API, agosto 2022
"Uno strumento utile per raccogliere informazioni su domini di nuova registrazione." — Classificato tra i primi 5 strumenti di rilevamento phishing — Blog SOCRadar, luglio 2022
"openSquat fornisce una protezione essenziale contro gli attacchi di domain squatting e phishing attraverso il monitoraggio e il rilevamento automatizzati." — Prince Yadav, TutorialsPoint, marzo 2026
"OpenSquat ha identificato 103 domini squatting, 960 siti web di phishing attivi e 53 domini con certificati sospetti." — Sharma et al., Journal of Information Security and Cybercrimes Research (JISCR), Vol. 7, Numero 1, giugno 2024
openSquat segue un modello open-core:
Questo modello consente trasparenza e collaborazione della comunità, supportando al contempo i requisiti di scala, affidabilità e operativi per l'uso aziendale.
pip install opensquat
opensquat -k keywords.txt
git clone https://github.com/atenreiro/opensquat
cd opensquat
pip install -r requirements.txt
python3 opensquat.py -k keywords.txt
Utenti del repository: in tutti gli esempi seguenti, sostituisci
opensquatconpython3 opensquat.pyper eseguire da una copia clonata.
confusable_homoglyphs, homoglyphs, colorama, requests, dnspython, beautifulsoup4# Esecuzione predefinita
opensquat
# Mostra tutte le opzioni
opensquat -h
# Usa un file di parole chiave personalizzato
opensquat -k my_keywords.txt
# Validazione DNS tramite Quad9
opensquat --dns
# Controlla i log di Certificate Transparency
opensquat --ct
# Scansiona porte aperte (80/443)
opensquat --portcheck
# Incrocia database di phishing
opensquat --phishing results.txt
# Salva come JSON
opensquat -o results.json -t json
# Salva come CSV
opensquat -o results.csv -t csv
Nota: Lato API (
--api), i cinque livelli di confidenza corrispondono a quattro valori di fuzzyness (exact,low,auto,high) —-c 3e-c 4corrispondono entrambi ahigh. Vedi Modalità Premium e API per la mappatura completa e come sovrascrivere con--api-fuzziness.
openSquat supporta tre modalità. La modalità predefinita (Community) è invariata — gli utenti esistenti non necessitano di opzioni. Le due modalità Premium condividono una singola chiave API openSquat; scegli Premium Feed se vuoi lo stesso pipeline di rilevamento locale con un feed più grande, o Premium API se vuoi rilevamento lato server senza download locale del feed.
Registrati su opensquat.com per ottenere una chiave. La stessa chiave funziona sia per Premium Feed (--premium) che per Premium API (--api).
--api-key YOUR_KEY sulla riga di comandoOPENSQUAT_API_KEYapi_key.txt nella directory corrente (una chiave per file, commenti # consentiti)L'opzione CLI è visibile in
ps. Preferisci la variabile d'ambiente o il file chiave in ambienti condivisi.
# Modalità Premium Feed — stesso pipeline locale, feed più grande
export OPENSQUAT_API_KEY=os_xxxxxxxxxxxx
opensquat -k keywords.txt --premium
# Modalità Premium API — rilevamento lato server per parola chiave
opensquat -k keywords.txt --api
# Premium API + controllo reputazione DNS su ogni dominio restituito
opensquat -k keywords.txt --api --dns
# Premium API con output JSON raggruppato per parola chiave
opensquat -k keywords.txt --api -t json -o results.json
# Ottimizza la ricerca Premium API
opensquat -k keywords.txt --api --api-fuzziness high --api-history-days 7 --api-max-results 200
Quando --premium o --api caricano correttamente una chiave, la CLI stampa una riga di conferma mascherata in modo che tu possa verificare quale chiave è stata rilevata senza esporla:
[*] Chiave API caricata: os_gL...L5Mb
In modalità Premium API, il riepilogo dell'esecuzione riporta la modalità attiva, il numero di chiamate API effettuate e il saldo residuo con delta di utilizzo (ad esempio, 4972 (usati 4 di 4976 in questa esecuzione)). Le righe di avanzamento per parola chiave appaiono nello stesso ordine del file delle parole chiave anche se le chiamate vengono eseguite in parallelo. L'esaurimento della quota (HTTP 429) restituisce risultati parziali in modo elegante; errori di autenticazione (401) e errori di piano (403) interrompono con un messaggio chiaro.
Se il backend limita la velocità della tua richiesta (HTTP 429 con intestazione Retry-After), lo strumento lo distingue dall'esaurimento della quota: vedrai un avviso giallo [!] Limite di velocità raggiunto (riprova tra Ns) invece del messaggio rosso quota esaurita, i risultati parziali vengono comunque restituiti e il riepilogo conserva il saldo API reale in modo da vedere esattamente quanti crediti hai effettivamente utilizzato. Per evitare di attivare limiti di velocità su scansioni grandi, usa --api-rate-limit N per limitare le richieste in uscita al secondo su tutti i worker. Un valore di 8 è un punto di partenza sicuro per la maggior parte dei backend.
# Limita a 8 richieste/secondo su tutti i worker
opensquat -k keywords.txt --api --api-rate-limit 8
JSON è il formato di output consigliato per la modalità Premium API perché l'API restituisce metadati per dominio che gli altri formati non possono trasportare altrettanto pulitamente: il TLD registrato, la data di prima apparizione NRD, un flag IDN homograph e la resa Unicode dell'homograph quando il dominio lo è.
opensquat -k keywords.txt --api -t json -o results.json
Esempio dell'output più ricco in modalità Premium API (ridotto):
[
{
"keyword": "microsoft",
"domains": [
{"domain": "securite-microsoft.fr", "tld": "fr", "date": "09-04-2026", "idn": false},
{"domain": "xn--mirosoft-hw7c.com", "tld": "com", "date": "09-04-2026", "idn": true, "unicode": "miᴄrosoft.com"}
]
}
]
Il flag idn più la resa unicode ti permettono di vedere a colpo d'occhio che xn--mirosoft-hw7c.com è in realtà ᴄ (Lettera latina piccola capitale C) che impersona la c in "microsoft" — informazioni che una semplice stringa punycode nasconde completamente.
È supportato anche l'output CSV e produce una riga per dominio con le stesse colonne di metadati, adatto ad analisti che lavorano in Excel o pandas:
opensquat -k keywords.txt --api -t csv -o results.csv
Il CSV viene scritto con un BOM UTF-8 in modo che Excel su Windows visualizzi correttamente la colonna unicode dell'homograph.
Le modalità Community e Premium Feed emettono la stessa struttura JSON di alto livello per coerenza tra le modalità, ma con solo il campo domain popolato per voce — il feed NRD non trasporta i metadati per dominio che solo l'API ospitata ha:
[
{
"keyword": "microsoft",
"domains": [
{"domain": "mirosoft.com"},
{"domain": "mcrosoft.net"}
]
}
]
Se passi --api-key senza selezionare anche --premium o --api, la CLI stampa un suggerimento di una riga che la chiave verrà ignorata in modalità Community (nessun cambio di modalità silenzioso).
In modalità Premium API, -c/--confidence viene mappato automaticamente alla fuzzyness API (0→exact, 1→low, 2→auto, 3→high, 4→high). Usa --api-fuzziness per sovrascrivere.
Premium API (--api) è incompatibile con --doppelganger e -d/--domains.
keywords.txt)# Le righe che iniziano con # sono commenti
mycompany
mybrand
myproduct
vt_key.txt)Per usare --vt o --subdomains, aggiungi la tua chiave API:
# Ottieni la tua chiave API gratuita su https://www.virustotal.com
your_api_key_here
api_key.txt)Richiesta per --premium e --api. Crea un file api_key.txt nella directory di lavoro:
# Ottieni la tua chiave su https://opensquat.com
# Le righe che iniziano con # vengono ignorate; viene utilizzata la prima riga non di commento.
os_your_key_here
La CLI risolve la chiave in questo ordine: flag --api-key → variabile d'ambiente $OPENSQUAT_API_KEY → file api_key.txt. I metodi variabile d'ambiente e file sono preferibili al flag CLI in ambienti condivisi, poiché gli argomenti CLI sono visibili tramite ps.
Esegui quotidianamente tramite crontab:
# installato via pip (consigliato) — ogni giorno alle 8:00, i feed si aggiornano ~7:30 UTC
0 8 * * * cd /path/to/workdir && opensquat -k keywords.txt -o results.json -t json
# Repository checkout — invoca opensquat.py direttamente con python3
0 8 * * * cd /path/to/opensquat && python3 opensquat.py -k keywords.txt -o results.json -t json
Il
cdin una directory di lavoro è importante se ti affidi aapi_key.txt(risolto dalla directory corrente) o vuoi cheresults.jsonvenga scritto in una posizione specifica.
Accogliamo con favore i contributi! Consulta la nostra Guida ai contributi per i dettagli.
Andre Tenreiro — LinkedIn · Chiave PGP
Questo progetto è concesso in licenza sotto GNU GPL v3.
| Tipo di minaccia | Descrizione |
|---|
| 🎣 Phishing | Domini fraudolenti che imitano il tuo marchio |
| 🔤 Typosquatting | Domini con errori di battitura comuni (es. gooogle.com) |
| 🌐 IDN Homograph | Caratteri simili di altri alfabeti |
| 👥 Doppelgänger | Domini contenenti il nome del tuo marchio |
| 🔀 Bitsquatting | Errori di singolo bit nei nomi di dominio |
| Livello | Opzione | Descrizione |
|---|
| 0 | -c 0 | Molto alto (meno risultati, alta precisione) |
| 1 | -c 1 | Alto (predefinito) |
| 2 | -c 2 | Medio |
| 3 | -c 3 | Basso |
| 4 | -c 4 | Molto basso (più risultati, più falsi positivi) |
| Modalità | Opzione | Cosa fa |
|---|
| Community (predefinita) | (nessuna) | Scarica il feed NRD gratuito (~100k domini/giorno) ed esegue il rilevamento Levenshtein locale. |
| Premium Feed | --premium | Scarica il feed NRD a pagamento (nrd-lite, molto più grande) usando la tua chiave API openSquat, poi esegue lo stesso rilevamento Levenshtein locale. |
| Premium API | --api | Salta il download locale del feed. Interroga l'API REST di domini simili openSquat per parola chiave e restituisce le corrispondenze lato server. |
| Argomento | Predefinito | Descrizione |
|---|
-k, --keywords | keywords.txt | File delle parole chiave da cercare |
-o, --output | results.txt | Nome del file di output |
-t, --type | txt | Formato di output: txt, json, csv |
-c, --confidence | 1 | Livello di confidenza (0-4). In modalità --api viene mappato automaticamente alla fuzzyness (-c 3 e -c 4 entrambi → high). |
-d, --domains | — | Usa un file di domini locale invece di scaricare |
-u, --url | feed opensquat | URL per scaricare il feed dei domini |
--dns | — | Abilita validazione DNS Quad9 |
--doppelganger | — | Modalità solo Doppelganger (parola chiave nel dominio + controllo raggiungibilità) |
--ct | — | Cerca nei log di Certificate Transparency |
--phishing | — | Incrocia database di phishing |
--subdomains | — | Recupera sottodomini tramite VirusTotal |
--portcheck | — | Controlla porte aperte 80/443 |
--vt | — | Convalida contro VirusTotal |
--premium | — | Modalità Premium Feed — usa il feed NRD a pagamento (richiede chiave API openSquat) |
--api | — | Modalità Premium API — interroga l'API REST di domini simili openSquat per parola chiave (nessun feed locale) |
--api-key | — | Chiave API openSquat (o imposta $OPENSQUAT_API_KEY, o usa api_key.txt) |
--api-fuzziness | (da -c) | Modalità Premium API: exact, low, high o auto |
--api-history-days | — | Modalità Premium API: finestra storica NRD in giorni (limitata al tetto del piano) |
--api-max-results | — | Modalità Premium API: massimo risultati per parola chiave (limitato al tetto del piano) |
--api-rate-limit | (illimitato) | Modalità Premium API: massimo richieste in uscita al secondo su tutti i worker |