whois es una colección de scripts en Bash/Shell y Python pensada para automatizar tareas de consulta y reconocimiento de direcciones IP (IPv4 e IPv6): quién es el titular de una IP, a qué rango/AS pertenece, qué puertos y certificados TLS expone, y cómo cruzar esa información con Shodan y nmap.
Es un proyecto de utilidades de línea de comandos orientado a tareas de OSINT, pentesting y análisis de seguridad, mantenido por hackingyseguridad.com (Antonio Taboada — @antonio_taboada).
- ¿Qué hace este repositorio?
- Requisitos previos
- Instalación
- Estructura del repositorio
- Tabla resumen de scripts
- Detalle de cada script
- Ficheros de datos y diccionarios
- Flujo de trabajo recomendado
- Ejemplo de flujo completo
- Preguntas frecuentes
- Licencia
- Autor y créditos
Todos los scripts giran en torno a una misma pregunta: "esta IP, ¿de quién es?". Para responderla combinan varias fuentes:
whois— consulta a los registros regionales de Internet (RIPE, ARIN, LACNIC, APNIC, AFRINIC) para obtener el titular (descr:), el rango (route:) y el sistema autónomo (AS) de una IP.host/dig -x— resolución DNS inversa (PTR) para obtener el nombre de host asociado a la IP.nmap— escaneo de puertos habituales (correo, web, VPN, paneles de administración) y extracción de certificados TLS (--script=ssl-cert), que a menudo revelan el dominio real detrás de la IP.- Shodan — motor de búsqueda de dispositivos conectados a Internet, usado para enriquecer la información de cada host (banners, servicios, vulnerabilidades conocidas, geolocalización).
- Favicon hashing (
mmh3) — calcula el hash MurmurHash3 del favicon de un sitio web para buscar en Shodan otros servidores que compartan el mismo icono (técnica típica de fingerprinting de infraestructuras).
El repositorio incluye variantes para IP única o listas de IPs en fichero, y para IPv4 o IPv6.
| Herramienta | Función | Instalación (Debian/Ubuntu/Kali) |
|---|---|---|
whois |
Consulta a los registros RIR (RIPE, ARIN, etc.) | sudo apt install whois |
nmap |
Escaneo de puertos y extracción de certificados TLS | sudo apt install nmap |
host / dig |
Resolución DNS directa e inversa | sudo apt install bind9-dnsutils |
shodan (CLI) |
Consultas a la API de Shodan | pip3 install shodan |
python3 + mmh3, requests |
Ejecutar favicon.py |
pip3 install -r requirements.txt |
Además, para usar el CLI de Shodan necesitas una API key gratuita o de pago obtenida en shodan.io e inicializarla una vez con:
shodan init TU_API_KEY# Clonar el repositorio
git clone https://github.com/hackingyseguridad/whois.git
cd whois
# Instalar dependencias del sistema y de shodan
sh instalar.sh
# (Opcional) Instalar dependencias de Python para favicon.py
pip3 install -r requirements.txt
# Dar permisos de ejecución si instalar.sh no lo ha hecho ya
chmod +x *.shwhois/
├── LICENSE # Licencia GPL-3.0
├── README.md # Este documento
├── instalar.sh # Instala nmap, shodan CLI y da permisos a los scripts
├── requirements.txt # Dependencias Python (mmh3, requests) para favicon.py
│
├── who.sh # Whois + nmap + Shodan de UNA ip (IPv4)
├── who2.sh # Consulta rápida a Shodan de una IP
├── who6.sh # Whois + nmap de UNA ip (IPv6)
├── whois.sh # Whois + nmap MASIVO desde ip.txt (IPv4)
├── whois6.sh # Whois + nmap MASIVO desde ipv6.txt (IPv6)
│
├── rango.sh # Escaneo de puertos sobre un rango CIDR
├── iprango.sh # Obtiene el rango (route:) de una IP vía whois
│
├── depura.sh # Limpia/deduplica IPs extraídas de resultado.txt
├── shodan.sh # Consulta Shodan para cada IP de ip.txt
├── favicon.py # Hash de favicon (mmh3) para buscar en Shodan
│
├── ip.txt # Lista de IPs de ejemplo/trabajo (IPv4)
├── dorks.txt # Google/Shodan dorks
├── buscadores.txt # Listado de buscadores/motores OSINT
├── busquedas.txt # Cadenas o plantillas de búsqueda
├── shodan.io # Notas/enlaces relacionados con Shodan
└── shodan.md # Documentación adicional sobre uso de Shodan
| Script | Lenguaje | Entrada | Objetivo IP | Uso típico | Requiere fichero |
|---|---|---|---|---|---|
| who.sh | Bash | 1 IP (argumento $1) |
IPv4 | Investigar una IP puntual: whois + PTR + nmap + certificado TLS + Shodan | No |
| who2.sh | Bash | 1 IP (argumento $1) |
IPv4/IPv6 | Consulta rápida y directa a Shodan de una IP | No |
| who6.sh | Bash/sh | 1 IP (argumento $1) |
IPv6 | Igual que who.sh pero adaptado a IPv6 (usa nmap -6) |
No |
| whois.sh | Bash | Lista de IPs | IPv4 | Repetir la investigación de who.sh para todas las IPs de ip.txt |
Sí — ip.txt |
| whois6.sh | Bash/sh | Lista de IPs | IPv6 | Igual que whois.sh pero para IPv6 |
Sí — ipv6.txt |
| rango.sh | Bash | Rango CIDR (argumento $1) |
IPv4 | Escanear puertos de correo/web de todo un rango/subred | No |
| iprango.sh | Bash | 1 IP (argumento $1) |
IPv4/IPv6 | Averiguar el rango de red (route:) al que pertenece una IP |
No |
| depura.sh | Bash | resultado.txt (salida de nmap) |
IPv4 | Extraer y deduplicar IPs detectadas en escaneos previos | Sí — resultado.txt |
| shodan.sh | Bash | Lista de IPs | IPv4/IPv6 | Consultar Shodan (shodan host) para cada IP de ip.txt |
Sí — ip.txt |
| favicon.py | Python 3 | URL de un favicon (argumento) | N/A (web) | Calcular el hash del favicon y buscar sitios gemelos en Shodan | No |
| instalar.sh | Bash | — | — | Instalar nmap, shodan (pip) y dar permisos a todos los scripts |
No |
Script principal para analizar una sola IP. Encadena cuatro fuentes de información en una sola ejecución.
sh who.sh 8.8.8.8Qué hace internamente:
| Paso | Comando | Propósito |
|---|---|---|
| 1 | host $1 / dig -x $1 +short |
Resolución DNS inversa (PTR) |
| 2 | whois $1 | grep descr: |
Titular / descripción registrada de la IP |
| 3 | nmap ... --script=ssl-cert -oG resultado.txt |
Escanea puertos de correo/web comunes y extrae el certificado TLS (revela el dominio real) |
| 4 | nmap -Pn -sT -p0 --script=whois-ip |
Consulta whois nativa vía script de nmap |
| 5 | shodan host $1 |
Información enriquecida desde Shodan (servicios, banners, geolocalización) |
Los puertos analizados incluyen: 110, 993, 995, 143, 443, 587, 465, 5061, 8000, 7443, 8443, 8080, 8888, 10443 (correo IMAP/POP3/SMTP seguro y paneles web/administración habituales).
El script más simple del repositorio: una única línea que delega toda la consulta en Shodan.
sh who2.sh 8.8.8.8shodan host $1Útil cuando solo necesitas el resumen que ofrece Shodan sin pasar por whois ni nmap.
Versión de who.sh adaptada a IPv6, usando nmap -6 y un servidor DNS distinto para las resoluciones.
sh who6.sh 2001:4860:4860::8888| Paso | Comando | Propósito |
|---|---|---|
| 1 | host $1 / dig -x $1 +short |
PTR sobre la IPv6 |
| 2 | whois $1 | grep descr: |
Titular registrado |
| 3 | nmap -6 ... --script=ssl-cert -oG resultado.txt |
Puertos + certificado TLS sobre IPv6 |
| 4 | nmap -6 -Pn -sT -p0 --script=whois-ip |
Whois vía script nmap sobre IPv6 |
Igual que who.sh, pero iterando sobre una lista de IPs contenida en ip.txt (una IP por línea).
# Edita ip.txt con tus IPs, una por línea, y ejecuta:
sh whois.shRepite para cada línea de ip.txt: resolución PTR, whois (con sudo), escaneo nmap de puertos con extracción de certificado TLS, y whois vía script nmap. El resultado del escaneo se acumula en resultado.txt.
Variante IPv6 de whois.sh. Lee las direcciones desde ipv6.txt (no incluido por defecto, hay que crearlo) y ejecuta el mismo proceso con nmap -6.
sh whois6.shPermite lanzar el escaneo de puertos directamente sobre un rango de red completo en formato CIDR, en lugar de una IP individual.
sh rango.sh 192.168.1.0/24Escanea los mismos puertos de correo/web que who.sh (110,993,995,143,443,587,465,8000,7443,8443,8080,8888,10443) con --script=ssl-cert y filtra las líneas con información de DNS: (nombres de host extraídos del certificado).
En lugar de buscar el titular (descr:), este script consulta a whois el bloque de red (route:) al que pertenece la IP indicada — útil para saber qué rango completo escanear después con rango.sh.
sh iprango.sh 8.8.8.8whois $1 $2 |grep route:Script de utilidad para procesar la salida de los escaneos nmap (resultado.txt, generado por who.sh, whois.sh, etc.). Extrae únicamente las direcciones IPv4 válidas mediante expresión regular, elimina duplicados y genera un fichero ip.txt limpio listo para reutilizar en otro script (por ejemplo shodan.sh).
sh depura.shFlujo interno:
grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" resultado.txt > resultado1.txt— extrae solo IPs con formato válido.awk '!visited[$0]++' resultado1.txt > resultado2.txt— elimina líneas duplicadas conservando el orden.cp resultado2.txt ip.txt— sobrescribeip.txtcon el resultado limpio, listo para usarse enwhois.shoshodan.sh.
Recorre el fichero ip.txt y ejecuta shodan host para cada IP, mostrando la información disponible en Shodan de todas ellas de forma secuencial.
sh shodan.shfor n in `cat ip.txt`; do echo $n; shodan host $n; doneRequiere tener el CLI de Shodan instalado e inicializado (shodan init APIKEY).
Script en Python 3 independiente del resto (no usa whois ni nmap). Descarga el favicon de una URL, calcula su hash MurmurHash3 (mmh3) — el mismo algoritmo que usa Shodan internamente — y genera un enlace directo de búsqueda en Shodan (http.favicon.hash:) para encontrar otros servidores que usen el mismo icono, una técnica clásica de reconocimiento de infraestructura (p. ej. detectar paneles de phishing clonados o servidores C2 que reutilizan plantillas).
python3 favicon.py http://hackingyseguridad.com/favicon.icoSalida esperada:
[!] http.favicon.hash:116323821
[*] Ver sitios con:
> https://www.shodan.io/search?query=http.favicon.hash%3A116323821
| Dependencia | Motivo |
|---|---|
mmh3 |
Cálculo del hash MurmurHash3 del favicon (formato que espera Shodan) |
requests |
Descarga del contenido del favicon vía HTTP/HTTPS |
codecs |
Codificación en base64 antes de aplicar el hash |
Script de preparación del entorno. Instala nmap, el cliente de línea de comandos de Shodan (pip3 install shodan) y otorga permisos de ejecución a todos los ficheros del repositorio.
sh instalar.shapt-get install nmap
pip3 install shodan
chmod 777 *El script usa
chmod 777, que otorga permisos totales a todos los usuarios del sistema. En entornos multiusuario es recomendable sustituirlo porchmod +x *.shpara dar solo permiso de ejecución.
| Fichero | Contenido |
|---|---|
ip.txt |
Lista de trabajo de IPs (IPv4), leída por whois.sh y shodan.sh, y regenerada por depura.sh |
dorks.txt |
Conjunto de dorks (cadenas de búsqueda avanzada) para motores como Google o Shodan |
buscadores.txt |
Listado de motores de búsqueda / fuentes OSINT de referencia |
busquedas.txt |
Plantillas o cadenas de búsqueda auxiliares |
shodan.io |
Notas y enlaces relacionados con el uso de Shodan |
shodan.md |
Documentación adicional sobre consultas y filtros de Shodan |
- Preparar el entorno:
sh instalar.shy, si vas a usarfavicon.py,pip3 install -r requirements.txt. - Investigar una IP puntual con
who.sh(IPv4) owho6.sh(IPv6) para obtener titular, PTR, certificado TLS y datos de Shodan. - Si quieres conocer el rango completo al que pertenece esa IP, usa
iprango.shy después escanea ese rango conrango.sh. - Vuelca las IPs objetivo en
ip.txt(una por línea) y lanzawhois.shpara procesarlas todas en bloque; la salida se guarda enresultado.txt. - Ejecuta
depura.shpara limpiar y deduplicar las IPs detectadas enresultado.txt, regenerandoip.txt. - Enriquece el listado depurado con
shodan.sh, que consulta Shodan para cada IP. - Si detectas un sitio sospechoso y quieres encontrar infraestructura relacionada, usa
favicon.pysobre su favicon para localizar sitios gemelos en Shodan.
# 1. Instalar dependencias
sh instalar.sh
# 2. Analizar una IP concreta
sh who.sh 203.0.113.10
# 3. Averiguar su rango de red
sh iprango.sh 203.0.113.10
# -> route: 203.0.113.0/24
# 4. Escanear todo el rango
sh rango.sh 203.0.113.0/24
# 5. Depurar y deduplicar las IPs detectadas en resultado.txt
sh depura.sh
# 6. Consultar Shodan para cada IP depurada
sh shodan.sh
# 7. Buscar servidores con el mismo favicon
python3 favicon.py https://203.0.113.10/favicon.icohttp://www.hackingyseguridad.com - @antonio_taboada @antonio_taboada