
Herramienta OSINT que detecta ciberocupación de dominios, typosquatting y suplantaciones de phishing mediante el monitoreo de dominios recién registrados contra palabras clave de marca con validación de DNS y VT.
openSquat es una herramienta de seguridad de Inteligencia de Fuentes Abiertas (OSINT) que identifica amenazas de ciberocupación dirigidas a tu marca o dominios:
"Una navaja suiza de gran potencia para la protección de marca" — Blog de WhoisXML API, Agosto 2022
"Una herramienta con un poder increíble para combatir el typosquatting y todo tipo de travesuras cibernéticas relacionadas." — Blog de WhoisXML API, Agosto 2022
"Una herramienta práctica para recopilar información sobre dominios recién registrados." — clasificada entre las 5 mejores herramientas de detección de phishing — Blog de SOCRadar, Julio 2022
"openSquat proporciona una protección esencial contra la ocupación de dominios y ataques de phishing mediante monitoreo y detección automatizados." — Prince Yadav, TutorialsPoint, Marzo 2026
"OpenSquat identificó 103 dominios ocupados, 960 sitios de phishing activos y 53 dominios con certificados sospechosos." — Sharma et al., Journal of Information Security and Cybercrimes Research (JISCR), Vol. 7, Número 1, Junio 2024
openSquat sigue un modelo open-core:
Este modelo permite transparencia y colaboración comunitaria, al mismo tiempo que respalda los requisitos de escala, confiabilidad y operación empresarial.
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
Usuarios del repositorio: en todos los ejemplos siguientes, reemplace
opensquatporpython3 opensquat.pypara ejecutar desde una copia clonada.
confusable_homoglyphs, homoglyphs, colorama, requests, dnspython, beautifulsoup4# Ejecución predeterminada
opensquat
# Mostrar todas las opciones
opensquat -h
# Usar un archivo de palabras clave personalizado
opensquat -k my_keywords.txt
# Validación DNS mediante Quad9
opensquat --dns
# Verificar registros de Transparencia de Certificados
opensquat --ct
# Escanear puertos abiertos (80/443)
opensquat --portcheck
# Referenciar bases de datos de phishing
opensquat --phishing results.txt
# Guardar como JSON
opensquat -o results.json -t json
# Guardar como CSV
opensquat -o results.csv -t csv
Nota: En el lado de la API (
--api), los cinco niveles de confianza se asignan a cuatro valores de borrosidad (exact,low,auto,high) — tanto-c 3como-c 4se asignan ahigh. Consulte Modos Premium y API para ver la asignación completa y cómo sobrescribir con--api-fuzziness.
openSquat admite tres modos. El predeterminado (Comunidad) no ha cambiado — los usuarios existentes no necesitan indicadores. Los dos modos Premium comparten una misma clave API de openSquat; elija Feed Premium si desea la misma canalización de detección local con un feed más grande, o API Premium si desea detección del lado del servidor sin descarga de feed local.
Regístrese en opensquat.com para obtener una clave. La misma clave funciona tanto para Feed Premium (--premium) como para API Premium (--api).
--api-key SU_CLAVE en la línea de comandosOPENSQUAT_API_KEYapi_key.txt en el directorio actual (una clave por archivo, se permiten comentarios #)El indicador de CLI es visible en la salida de
ps. Prefiera la variable de entorno o el archivo de clave en entornos compartidos.
# Modo Feed Premium — misma canalización local, feed más grande
export OPENSQUAT_API_KEY=os_xxxxxxxxxxxx
opensquat -k keywords.txt --premium
# Modo API Premium — detección del lado del servidor por palabra clave
opensquat -k keywords.txt --api
# API Premium + verificación de reputación DNS en cada dominio devuelto
opensquat -k keywords.txt --api --dns
# API Premium con salida JSON agrupada por palabra clave
opensquat -k keywords.txt --api -t json -o results.json
# Ajustar la búsqueda de la API Premium
opensquat -k keywords.txt --api --api-fuzziness high --api-history-days 7 --api-max-results 200
Cuando --premium o --api carga una clave exitosamente, la CLI imprime una línea de confirmación enmascarada para que pueda verificar qué clave se seleccionó sin filtrarla:
[*] Clave API cargada: os_gL...L5Mb
En el modo API Premium, el resumen de ejecución informa el modo activo, la cantidad de llamadas API realizadas y su saldo restante con el delta de uso (por ejemplo, 4972 (usados 4 de 4976 en esta ejecución)). Las líneas de progreso por palabra clave aparecen en el mismo orden que su archivo de palabras clave, aunque las llamadas se ejecuten en paralelo. El agotamiento de cuota (HTTP 429) devuelve resultados parciales de manera elegante; los errores de autenticación (401) y los errores de plan (403) abortan con un mensaje claro.
Si el backend limita la velocidad de su solicitud (HTTP 429 con un encabezado Retry-After), la herramienta lo distingue del agotamiento de cuota: verá una advertencia amarilla [!] Límite de velocidad alcanzado (reintentar en Ns) en lugar del mensaje rojo de cuota agotada, los resultados parciales aún se devuelven y el resumen conserva su saldo real de API para que pueda ver exactamente cuántos créditos usó realmente. Para evitar activar límites de velocidad en escaneos grandes, pase --api-rate-limit N para limitar las solicitudes salientes por segundo entre todos los trabajadores. Un valor de 8 es un punto de partida seguro para la mayoría de los backends.
# Limitar a 8 solicitudes/segundo entre todos los trabajadores
opensquat -k keywords.txt --api --api-rate-limit 8
Se recomienda JSON como formato de salida para el modo API Premium porque la API devuelve metadatos por dominio que los otros formatos no pueden transportar tan limpiamente: el TLD registrado, la fecha de primera aparición del NRD, un indicador de homógrafo IDN y la representación unicode del homógrafo cuando el dominio lo es.
opensquat -k keywords.txt --api -t json -o results.json
Ejemplo de la salida más rica en el modo API Premium (recortado):
[
{
"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"}
]
}
]
El indicador idn junto con la representación unicode le permiten ver de un vistazo que xn--mirosoft-hw7c.com es en realidad ᴄ (LETRA LATINA C MAYÚSCULA PEQUEÑA) haciéndose pasar por la c de "microsoft" — información que una cadena punycode simple oculta por completo.
La salida CSV también es compatible y produce una fila por dominio con las mismas columnas de metadatos, lo que resulta adecuado para analistas que trabajan en Excel o pandas:
opensquat -k keywords.txt --api -t csv -o results.csv
El CSV se escribe con una marca BOM UTF-8 para que Excel en Windows renderice correctamente la columna de homógrafos unicode.
Los modos Comunidad y Feed Premium emiten la misma forma JSON de nivel superior para consistencia entre modos, pero solo con el campo domain poblado por entrada — el feed NRD no transporta los metadatos por dominio que solo tiene la API alojada:
[
{
"keyword": "microsoft",
"domains": [
{"domain": "mirosoft.com"},
{"domain": "mcrosoft.net"}
]
}
]
Si pasa --api-key sin seleccionar también --premium o --api, la CLI imprime una sugerencia de una línea de que la clave será ignorada en modo Comunidad (sin cambio de modo silencioso).
En el modo API Premium, -c/--confidence se asigna automáticamente a la borrosidad de la API (0→exact, 1→low, 2→auto, 3→high, 4→high). Use --api-fuzziness para sobrescribir.
API Premium (--api) es incompatible con --doppelganger y -d/--domains.
keywords.txt)# Las líneas que comienzan con # son comentarios
miempresa
mimarca
miproducto
vt_key.txt)Para usar --vt o --subdomains, agregue su clave API:
# Obtenga su clave API gratuita en https://www.virustotal.com
su_clave_api_aqui
api_key.txt)Requerida para --premium y --api. Cree un archivo api_key.txt en el directorio de trabajo:
# Obtenga su clave en https://opensquat.com
# Las líneas que comienzan con # se ignoran; se usa la primera línea no comentada.
os_su_clave_aqui
La CLI resuelve la clave en este orden: indicador --api-key → variable de entorno $OPENSQUAT_API_KEY → archivo api_key.txt. Se prefieren los métodos de variable de entorno y archivo sobre el indicador de CLI en entornos compartidos, ya que los argumentos de CLI son visibles mediante ps.
Ejecutar diariamente mediante crontab:
# instalado con pip (recomendado) — todos los días a las 8 AM, los feeds se actualizan aproximadamente a las 7:30 AM UTC
0 8 * * * cd /ruta/al/directorio-de-trabajo && opensquat -k keywords.txt -o results.json -t json
# Copia del repositorio — invocar opensquat.py directamente con python3
0 8 * * * cd /ruta/a/opensquat && python3 opensquat.py -k keywords.txt -o results.json -t json
El
cda un directorio de trabajo es importante si depende deapi_key.txt(resuelto desde el directorio actual) o desea queresults.jsonse escriba en una ubicación específica.
¡Damos la bienvenida a las contribuciones! Consulte nuestra Guía de Contribución para más detalles.
Andre Tenreiro — LinkedIn · Clave PGP
Este proyecto está licenciado bajo GNU GPL v3.
| Tipo de Amenaza | Descripción |
|---|
| 🎣 Phishing | Dominios fraudulentos que imitan tu marca |
| 🔤 Typosquatting | Dominios con errores tipográficos comunes (ej. gooogle.com) |
| 🌐 Homógrafo IDN | Caracteres parecidos de otros alfabetos |
| 👥 Doppelgänger | Dominios que contienen el nombre de tu marca |
| 🔀 Bitsquatting | Errores de un solo bit en nombres de dominio |
| Nivel | Indicador | Descripción |
|---|
| 0 | -c 0 | Muy alto (menos resultados, alta precisión) |
| 1 | -c 1 | Alto (predeterminado) |
| 2 | -c 2 | Medio |
| 3 | -c 3 | Bajo |
| 4 | -c 4 | Muy bajo (más resultados, más falsos positivos) |
| Modo | Indicador | Qué hace |
|---|
| Comunidad (predeterminado) | (ninguno) | Descarga el feed NRD gratuito (~100k dominios/día) y ejecuta detección Levenshtein local. |
| Feed Premium | --premium | Descarga el feed NRD de pago (nrd-lite, mucho más grande) usando su clave API de openSquat, luego ejecuta la misma detección Levenshtein local. |
| API Premium | --api | Omite la descarga del feed local. Consulta la API REST de búsqueda de similitud de openSquat por palabra clave y devuelve coincidencias del lado del servidor. |
| Argumento | Predeterminado | Descripción |
|---|
-k, --keywords | keywords.txt | Archivo de palabras clave a buscar |
-o, --output | results.txt | Nombre del archivo de salida |
-t, --type | txt | Formato de salida: txt, json, csv |
-c, --confidence | 1 | Nivel de confianza (0-4). En modo --api se asigna automáticamente a borrosidad (-c 3 y -c 4 ambos → high). |
-d, --domains | — | Usar archivo de dominio local en lugar de descargar |
-u, --url | feed opensquat | URL para descargar el feed de dominios |
--dns | — | Habilitar validación DNS Quad9 |
--doppelganger | — | Modo solo Doppelgänger (palabra clave en dominio + verificación de accesibilidad) |
--ct | — | Buscar registros de Transparencia de Certificados |
--phishing | — | Referenciar base de datos de phishing |
--subdomains | — | Obtener subdominios mediante VirusTotal |
--portcheck | — | Verificar puertos abiertos 80/443 |
--vt | — | Validar contra VirusTotal |
--premium | — | Modo Feed Premium — usar el feed NRD de pago (requiere clave API de openSquat) |
--api | — | Modo API Premium — consultar la API REST de búsqueda de similitud de openSquat por palabra clave (sin feed local) |
--api-key | — | Clave API de openSquat (o establecer $OPENSQUAT_API_KEY, o usar api_key.txt) |
--api-fuzziness | (desde -c) | Modo API Premium: exact, low, high o auto |
--api-history-days | — | Modo API Premium: ventana de historial NRD en días (limitada por el techo del plan) |
--api-max-results | — | Modo API Premium: máximo de resultados por palabra clave (limitado por el techo del plan) |
--api-rate-limit | (sin límite) | Modo API Premium: máximo de solicitudes salientes por segundo entre todos los trabajadores |