Guía · Webs y formularios
Cómo saber qué tecnología usa una web y quién es su dueño: script gratis con webappanalyzer y WHOIS
Script en Python que lee una lista de URLs y saca a un CSV su tecnología (CMS, servidor, analítica, versiones) con las reglas de webappanalyzer, y los datos del dominio y de contacto por RDAP y WHOIS.
- Actualizada
- 22 oct 2026
- Lectura
- 9 min
- Herramientas
- 6
Respuesta corta: con nuestro script en GitHub le pasas un .txt con una URL por línea y te devuelve un CSV con la tecnología de cada web (CMS, lenguaje, servidor, analítica, CDN y versiones cuando se ven), detectada con las 7647 huellas de webappanalyzer, y los datos del dominio: registrador, fechas, titular, contacto y correo de abuso, por RDAP y WHOIS. Es gratis, no necesita cuentas ni claves y se ejecuta con un comando.
uv run analizar_webs.py webs.txt
Para qué sirve
- Revisar tu cartera de webs: si eres agencia o agente digitalizador, saber de un vistazo qué CMS y qué versiones tiene cada web de la que eres responsable y cuándo caduca cada dominio. Tras PHP2Shell, que deja sin parche a PHP 8.1 y anteriores y que según nuestra estimación afecta a unas 115.500 webs del Kit Digital, es lo primero que conviene saber.
- Estudiar a la competencia: con qué CMS, analítica o plataforma de comercio trabajan las webs de tu sector.
- Auditar antes de una migración: inventariar qué usa cada web (formularios, chat, analítica, CDN) antes de moverla.
- Saber a quién avisar: el registrador y su correo de abuso para denunciar una web fraudulenta o una suplantación.
Lo que necesitas
- uv, que instala Python y las dependencias por ti (
brew install uven Mac, o el instalador de su web). - El script: descarga la carpeta analizar-web-tecnologia-whois del repositorio o clónalo con
git clone https://github.com/magranero/yeswelab-laboratorio. - Opcional, para detectar más: Chromium de Playwright (
uv run --with playwright playwright install chromium).
Paso 1: la lista de URLs
Un fichero de texto con una URL por línea. Las líneas que empiezan por # se ignoran y, si falta https://, se añade. El ejemplo que viene en el repositorio:
# Una URL por línea. Las líneas que empiezan por # se ignoran.
https://yeswelab.com
https://wordpress.org
https://www.python.org
https://www.mozilla.org
https://www.boe.es
Paso 2: ejecutarlo
# Modo rápido: solo Python, sin navegador
uv run analizar_webs.py webs.txt
# Con nombre de salida y un JSON con las pruebas de cada detección
uv run analizar_webs.py webs.txt -o mis_webs.csv --detalle mis_webs.json
# Modo navegador: abre cada web en Chromium y detecta bastante más
uv run --with playwright analizar_webs.py webs.txt --navegador
La primera vez descarga las reglas de webappanalyzer, fijadas a un commit concreto para que dos ejecuciones den lo mismo. Con --reglas master usa las más recientes.
Paso 3: leer el CSV
Una fila por URL. Las columnas más útiles:
| Columna | Qué contiene |
|---|---|
tecnologias | Todo lo detectado en la web, con versión si se ve: WordPress 7.2 | PHP | Nginx… |
cms, lenguajes, servidor_web, analitica, cdn | Lo mismo, separado por categoría |
servicios_dns | Servicios que solo aparecen en los DNS del dominio |
registrador, alta_dominio, caducidad_dominio | Datos del registro del dominio |
titular, titular_pais | Dueño del dominio, (oculto) o (servicio de privacidad: …) |
emails_contacto, telefonos_contacto | Contacto del titular cuando el registro lo publica |
email_abuso | Dónde denunciar un abuso: el correo del registrador |
errores | Lo que no se pudo obtener y por qué |
Así salieron las 5 webs del ejemplo el 22 de octubre de 2026 (modo navegador, resumido):
| Web | Tecnología detectada | Titular del dominio |
|---|---|---|
| yeswelab.com | Astro, Netlify, Umami, Let’s Encrypt, HSTS, Open Graph | Oculto (solo se ve el país: ES) |
| wordpress.org | WordPress 7.2, PHP, MySQL, Nginx, Gutenberg 24.2.0, Google Analytics… (15) | Servicio de privacidad: DNStination, Inc. |
| python.org | Nginx, Varnish, jQuery 1.8.2, Modernizr 2.6.2, Plausible… (11) | Oculto |
| mozilla.org | Google Tag Manager, Varnish, Let’s Encrypt, HSTS, Open Graph… (6) | Mozilla Corporation, US, con correo y teléfono |
| boe.es | Solo HSTS | No disponible: .es no tiene WHOIS público |
Tres lecciones de esa tabla:
- El navegador marca la diferencia. En modo rápido salieron 22 tecnologías en total; con
--navegador, 39. Casi la mitad de las huellas de webappanalyzer son variables de JavaScript o elementos de la página que solo existen cuando se ejecuta. Astro y Umami en yeswelab.com, o jQuery en python.org, solo aparecen así. - Una web bastionada no cuenta casi nada. El BOE no anuncia su servidor ni su gestor de contenidos y usa su propio JavaScript: solo se ve que obliga a usar HTTPS (HSTS).
- Los DNS no son la web. Los dominios de python.org y mozilla.org tienen registros de verificación de OpenAI o Anthropic, pero eso no significa que la web use esos servicios: significa que alguien de la organización ha verificado el dominio. Por eso van aparte, en
servicios_dns.
Cómo funciona por dentro
La tecnología: las huellas de webappanalyzer
webappanalyzer es la continuación abierta de las reglas de Wappalyzer, que se volvió privado en agosto de 2023. Cada tecnología es un JSON con expresiones regulares para cada sitio donde puede delatarse:
- Cabeceras HTTP (
Server: nginx,X-Powered-By: PHP/8.3), cookies (PHPSESSID,wp-settings) y etiquetasmeta(generator: WordPress 7.2). - HTML y scripts: rutas como
/wp-content/o librerías comojquery-1.8.2.min.js, de donde sale la versión. - DNS, certificado TLS y
robots.txt: quién gestiona el correo, quién emitió el certificado. - Con navegador: variables globales de JavaScript (
window.wp), selectores CSS y peticiones en segundo plano.
Además, unas tecnologías implican otras (WordPress implica PHP y MySQL), otras se excluyen entre sí y otras solo cuentan si aparece la que requieren. El script aplica todo eso y, con --detalle, guarda qué prueba delató cada tecnología y con qué confianza.
El contacto: RDAP antes que WHOIS
WHOIS es el protocolo de siempre: texto libre, distinto en cada registro. RDAP es su sucesor estándar, en JSON y con el mismo formato en todos los registros que lo ofrecen. El script:
- Busca en el directorio oficial de IANA el servidor RDAP del dominio (
.com,.org,.eu…). - Si el registro solo publica el registrador, como pasa con
.comy.org, sigue el enlace al RDAP del registrador, donde está el titular. - Si aun así no hay contacto, prueba con WHOIS clásico (puerto 43).
- Marca como
(oculto)lo que el registro protege y como(servicio de privacidad: …)los intermediarios, para que nadie los confunda con el dueño real.
Limitaciones
- Solo ve lo que la web enseña. Ocultar cabeceras y versiones es una buena práctica de seguridad, y esas webs dan poco.
- Las versiones pueden engañar: algunas salen de comentarios o nombres de fichero que nadie actualizó.
.esno tiene RDAP ni WHOIS público. Para esos dominios solo queda la consulta manual en dominios.es.- El RGPD oculta a los particulares. Lo normal es ver el registrador, las fechas y el país, y el titular solo cuando es una organización que no lo ha ocultado.
Úsalo con cabeza
- Una visita por web. El script pide la portada y
robots.txt, se identifica en su User-Agent y espera un segundo entre webs. No lo conviertas en un rastreador. - Los datos de contacto son datos personales cuando identifican a una persona. No los uses para publicidad sin consentimiento (artículo 21 de la LSSI) ni para montar bases de datos de contactos.
- Para tu cartera, no para la de otros. Saber que una web tiene un CMS antiguo sirve para actualizarla si es tuya o de tus clientes. Para el resto, como mucho, avisar al responsable.
Relacionado
- PHP2Shell, PHP 7 y el Kit Digital: 1.424 días sin parches: por qué conviene saber qué versión tienen las webs de las que eres responsable.
- Cómo dejar WordPress: web rápida y segura con Astro, Cloudflare y AWS: el siguiente paso cuando el inventario te dice qué webs migrar.
- Crear webs y formularios con IA o sin código
- Agentes de navegador: Accessibility Tree vs capturas, con Playwright, como el modo
--navegador.
Lo que haríamos en el laboratorio
Si gestionas decenas o cientos de webs, te montamos el inventario completo: tecnología y versiones de cada una, caducidad de dominios y certificados, y qué hay que actualizar primero, con los datos y sin alarmismo.
¿Quieres saber cómo está tu cartera de webs? Encárganos el experimento.
Preguntas frecuentes
¿Cómo puedo saber con qué está hecha una web?
Con un detector de tecnologías como Wappalyzer o su continuación abierta, webappanalyzer: miran las cabeceras HTTP, las cookies, el HTML, los scripts y los DNS de la web y los comparan con miles de huellas conocidas. Nuestro script hace eso mismo para una lista de URLs y lo guarda en un CSV.
¿Qué es webappanalyzer?
Es la continuación de código abierto de las reglas de Wappalyzer, que pasó a ser privado en agosto de 2023. La mantiene la empresa Enthec en GitHub con licencia GPL-3.0 y, a 22 de octubre de 2026, reconoce 7647 tecnologías.
¿Cómo sé quién es el dueño de un dominio?
Con una consulta WHOIS o, mejor, RDAP, su sucesor estándar en JSON. Devuelven el registrador, las fechas de alta y caducidad y, si el titular no los ha ocultado, su organización, país y contacto. Desde el RGPD, los datos de particulares suelen estar ocultos.
¿Por qué no salen los datos de un dominio .es?
Porque el registro de .es (Red.es) no ofrece RDAP ni WHOIS público: solo responde a IP autorizadas. La consulta pública se hace a mano en dominios.es, con captcha.
¿Puedo usar los correos del WHOIS para enviar publicidad?
No. Si identifican a una persona son datos personales, y en España el artículo 21 de la LSSI prohíbe enviar comunicaciones comerciales por correo sin consentimiento previo. Úsalos para lo que se publican: avisar de un problema con el dominio o la web.