eb8dbf66a1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.1 KiB
3.1 KiB
name, kind, lang, domain, version, purity, signature, description, tags, params, output, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path
| name | kind | lang | domain | version | purity | signature | description | tags | params | output | uses_functions | uses_types | returns | returns_optional | error_type | imports | tested | tests | test_file_path | file_path | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| whois_lookup | function | py | cybersecurity | 1.0.0 | impure | def whois_lookup(dominio: str, timeout_s: float = 15.0) -> dict | Recoleccion OSINT pasiva de datos de registro de dominio via RDAP (reemplazo moderno de WHOIS sobre HTTP/JSON). Consulta https://rdap.org/domain/<dominio> con http_get_json y normaliza registrar, fechas de creacion/expiracion/ultimo cambio, nameservers, estados y entidades. Devuelve {found: False} si el dominio no existe (404). |
|
|
dict normalizado con found (bool), registrar, creation_date, expiration_date, last_changed, nameservers (lista), status (lista), entities (lista de {handle, roles}) y raw (RDAP completo). Si el dominio no existe (HTTP 404) devuelve {found: False}. |
|
false | error_go_core | true |
|
python/functions/cybersecurity/whois_lookup_test.py | python/functions/cybersecurity/whois_lookup.py |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from cybersecurity import whois_lookup
info = whois_lookup("organic-machine.com")
if info["found"]:
print(info["registrar"]) # 'Example Registrar Inc.'
print(info["creation_date"]) # '2020-01-15T10:00:00Z'
print(info["expiration_date"]) # '2027-01-15T10:00:00Z'
print(info["nameservers"]) # ['ns1.example.net', 'ns2.example.net']
print(info["status"]) # ['client transfer prohibited']
else:
print("dominio no registrado")
Cuando usarla
Usala para obtener metadatos de registro de un dominio sin depender del CLI
whois (no instalado): edad del dominio, fecha de expiracion (dominios a
punto de caducar), registrar y nameservers autoritativos. Util en perfilado
pasivo, deteccion de dominios recien creados (typosquatting/phishing) y
validacion de propiedad.
Gotchas
- RDAP no esta uniformemente desplegado en todos los TLD: algunos devuelven
campos vacios o ni siquiera responden. Por eso los campos opcionales pueden
quedar
Noneynameservers/status/entitieslistas vacias. - rdap.org actua como bootstrap y redirige al servidor RDAP autoritativo del TLD; depende de su disponibilidad.
- El registrante (
entitiescon rol distinto deregistrar) suele estar redactado por privacy/GDPR: casi siempre solo verashandleyroles, sin datos personales. - Un dominio no registrado devuelve
{"found": False}(HTTP 404); cualquier otro error HTTP (rate limit 429, 5xx) se propaga comoRuntimeError. - Las fechas se devuelven tal cual las da RDAP (ISO 8601 UTC), sin parsear a
objetos
datetime.