
whosthere v0.8.3
Herramienta de descubrimiento de red de área local con una interfaz de usuario de terminal interactiva (TUI) escrita en Go. Descubre, explora y comprende tu LAN de forma intuitiva. Toc, toc.. ¿quién es? 🚪
Whosthere
Herramienta de descubrimiento de redes de área local con una interfaz de usuario de terminal interactiva (TUI) escrita en Go. Descubre, explora y comprende tu LAN de forma intuitiva.
Whosthere realiza escaneos concurrentes sin privilegios utilizando escáneres mDNS y SSDP. Además, recorre la subred local intentando conexiones TCP/UDP para provocar la resolución ARP, y luego lee la caché ARP para identificar dispositivos en tu red de área local. Esta técnica llena la caché ARP sin necesidad de privilegios elevados. Todos los dispositivos descubiertos se enriquecen con búsquedas OUI para mostrar los fabricantes cuando estén disponibles.
Whosthere proporciona una manera amigable e intuitiva de responder la pregunta que todo administrador de red se hace: "¿Quién está en mi red?"

CaracterÃsticas
- TUI interactiva: Navega y explora los dispositivos descubiertos de forma intuitiva.
- Rápido y concurrente: Utiliza múltiples métodos de descubrimiento simultáneamente.
- No requiere privilegios elevados: Se ejecuta completamente en espacio de usuario.
- Enriquecimiento de dispositivos: Utiliza búsqueda OUI para mostrar los fabricantes de los dispositivos.
- Escáner de puertos integrado: Descubrimiento opcional de servicios en hosts encontrados (¡solo escanea dispositivos con permiso!).
- Modo demonio con API HTTP: Ejecútalo en segundo plano e intégralo con otras herramientas.
- Temas y configuración: Personaliza la apariencia y el comportamiento mediante configuración YAML.
Instalación
Mediante Homebrew con brew:
brew install whosthere
En NixOS con nix:
nix profile install nixpkgs#whosthere
En Arch Linux con yay:
yay -S whosthere-bin
Si tu gestor de paquetes no está listado, siempre puedes instalar con Go:
go install github.com/ramonvermeulen/whosthere@latest
O compilar desde el código fuente:
git clone https://github.com/ramonvermeulen/whosthere.git
cd whosthere
make build
Adicionalmente, puedes descargar binarios precompilados desde la página de lanzamientos.
Uso
Ejecuta la TUI para descubrimiento interactivo:
whosthere
Ejecuta como CLI para realizar un único escaneo y mostrar los resultados:
whosthere scan -t 5
EnvÃa los resultados a un archivo JSON:
whosthere scan -t 5 --json --pretty > devices.json
Ejecuta como demonio con API HTTP:
whosthere daemon --port=8080
Puedes encontrar opciones adicionales de lÃnea de comandos ejecutando:
whosthere --help
Atajos de teclado (TUI)
| Tecla | Acción |
|---|---|
/ | Iniciar búsqueda con regex |
k | Arriba |
j | Abajo |
g | Ir al principio |
G | Ir al final |
y | Copiar IP del dispositivo seleccionado |
Y | Copiar MAC del dispositivo seleccionado |
enter | Mostrar detalles del dispositivo |
CTRL+t | Alternar selector de tema |
CTRL+i | Alternar selector de interfaz |
CTRL+c/q | Detener la aplicación |
ESC | Limpiar búsqueda / Volver atrás |
p (vista detalles) | Iniciar escaneo de puertos en el dispositivo |
tab (vista modal) | Cambiar selección de botón |
Configuración
Whosthere admite múltiples métodos de configuración con la siguiente precedencia (de mayor a menor):
- Banderas de lÃnea de comandos - Mayor prioridad. Consulta
whosthere --helppara las banderas disponibles. - Variables de entorno - Prefijo con
WHOSTHERE__. Ver Configuración mediante variables de entorno. - Archivo de configuración - Archivo de configuración YAML. Ver Archivo de configuración.
- Valores por defecto - Valores predeterminados. Consulta
DefaultConfig()en config.go.
Archivo de configuración
Whosthere busca el archivo de configuración en el siguiente orden, utilizando el primero que encuentre:
- Ruta especificada mediante la bandera
--configo la variable de entornoWHOSTHERE_CONFIG $XDG_CONFIG_HOME/whosthere/config.yaml(si está definidoXDG_CONFIG_HOME)~/.config/whosthere/config.yaml(ubicación predeterminada)
Ejemplo de configuración:
# Descomenta la siguiente lÃnea para configurar una interfaz de red especÃfica - usa la del sistema operativo si no se establece
# network_interface: eth0
# Cuando está habilitado, se muestran los dispositivos de todas las interfaces de red y persisten al cambiar de interfaz
# Nota: si dos interfaces comparten la misma subred (por ejemplo, ambas usan 192.168.1.x), los dispositivos pueden fusionarse
# ya que se identifican por dirección IP. Úsalo con precaución en subredes superpuestas.
all_interfaces: false
# Frecuencia con la que se ejecutan los escaneos de descubrimiento
scan_interval: 20s
# Tiempo máximo de espera para cada escaneo, se recomienda que sea menor que el intervalo de escaneo
scan_timeout: 10s
scanners:
mdns:
enabled: true
ssdp:
enabled: true
arp:
enabled: true
sweeper:
enabled: true
interval: 5m
timeout: 20s
port_scanner:
timeout: 5s
# Lista de puertos TCP a escanear en los dispositivos descubiertos
tcp: [21, 22, 23, 25, 80, 110, 135, 139, 143, 389, 443, 445, 993, 995, 1433, 1521, 3306, 3389, 5432, 5900, 8080, 8443, 9000, 9090, 9200, 9300, 10000, 27017]
splash:
enabled: true
delay: 1s
theme:
# Cuando está deshabilitado, la TUI usará los colores ANSI predeterminados del terminal
# Ver también la variable de entorno NO_COLOR para deshabilitar completamente los colores ANSI
enabled: true
# Ver la lista completa de temas disponibles en https://github.com/ramonvermeulen/whosthere/tree/main/internal/ui/theme/theme.go
# Establece name a "custom" para usar los colores personalizados a continuación
# Para cualquier color no configurado, se tomará el valor del tema predeterminado como fallback
name: default
# Deshabilita completamente los colores ANSI, anula theme.enabled
# También se puede establecer mediante variables de entorno NO_COLOR o WHOSTHERE__THEME__NO_COLOR
# no_color: false
# Colores de tema personalizados (descomenta y establece name: custom para usarlos)
# primitive_background_color: "#000a1a"
# contrast_background_color: "#001a33"
# more_contrast_background_color: "#003366"
# border_color: "#0088ff"
# title_color: "#00ffff"
# graphics_color: "#00ffaa"
# primary_text_color: "#cceeff"
# secondary_text_color: "#6699ff"
# tertiary_text_color: "#ffaa00"
# inverse_text_color: "#000a1a"
# contrast_secondary_text_color: "#88ddff"
Variables de entorno
Variables de entorno generales
| Variable | Descripción |
|---|---|
WHOSTHERE_CONFIG | Ruta al archivo de configuración, para poder sobrescribir la ubicación predeterminada. |
WHOSTHERE_LOG | Establece el nivel de registro (p. ej., debug, info, warn, error). Por defecto info. |
NO_COLOR | Deshabilita los colores ANSI en la TUI. |
Configuración mediante variables de entorno
Cualquier opción de configuración disponible en el archivo YAML se puede establecer mediante variables de entorno usando el
prefijo WHOSTHERE__ (nota el doble guión bajo). Las claves de configuración anidadas se separan con guiones bajos dobles y las
claves no distinguen entre mayúsculas y minúsculas.
Ejemplos:
WHOSTHERE__SPLASH__ENABLED=false- Deshabilitar la pantalla de bienvenida, equivalente asplash.enabled: falseen la configuración YAMLWHOSTHERE__SPLASH__DELAY=2s- Establecer el retardo de la pantalla de bienvenida a 2 segundos, equivalente asplash.delay: 2sen la configuración YAMLWHOSTHERE__SCAN_INTERVAL=30s- Establecer el intervalo de escaneo a 30 segundos, equivalente ascan_interval: 30sen la configuración YAMLWHOSTHERE__SCANNERS__MDNS__ENABLED=false- Deshabilitar el escáner mDNS, equivalente ascanners.mdns.enabled: falseen la configuración YAMLWHOSTHERE__PORT_SCANNER__TCP=80,443,8080- Establecer puertos TCP personalizados para escanear, equivalente aport_scanner.tcp: [80, 443, 8080]en la configuración YAMLWHOSTHERE__THEME__NAME=cyberpunk- Establecer el tema a cyberpunk, equivalente atheme.name: cyberpunken la configuración YAML
Modo demonio API HTTP
Cuando ejecutas Whosthere en modo demonio, expone una API HTTP muy simple con los siguientes endpoints:
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /devices | Obtener lista de todos los dispositivos descubiertos |
| GET | /device/{ip} | Obtener detalles de un dispositivo especÃfico |
| GET | /health | Verificación de estado |
Temas
El tema se puede configurar mediante el archivo de configuración, o en tiempo de ejecución a través del atajo de teclado CTRL+t.
Puedes encontrar una lista completa de los temas disponibles aquÃ, ¡siéntete libre de abrir un PR para añadir tu propio tema!
Ejemplo de configuración de tema:
theme:
enabled: true
name: cyberpunk
Cuando el name se establece en custom, se pueden usar las otras opciones de color para crear tu propio tema personalizado.
Cuando la opción enabled se establece en false, la TUI usará los colores ANSI predeterminados del terminal.
Cuando se establece la variable de entorno NO_COLOR, todos los colores ANSI se deshabilitarán.
Registro
Los registros se escriben en el directorio de estado de la aplicación:
$XDG_STATE_HOME/whosthere/app.log(si está definidoXDG_STATE_HOME)~/.local/state/whosthere/app.log(fallback Linux/MacOS)%LOCALAPPDATA%/whosthere/app.log(fallback Windows)
Cuando no se ejecuta en modo TUI, los registros también se escriben en la consola.
Plataformas
Whosthere es compatible con las siguientes plataformas:
- Linux
- macOS
- Windows
Problemas conocidos
Para que la funcionalidad del portapapeles funcione, se utiliza un fork de go-clipboard. Asegúrate de tener la herramienta de copia adecuada instalada para tu sistema operativo:
| SO | Herramientas de copia compatibles |
|---|---|
| Darwin | pbcopy |
| Windows | clip.exe |
| Linux/FreeBSD/NetBSD/OpenBSD/Dragonfly | X11: xsel, xclip Wayland: wl-copy |
Aviso legal
Whosthere está diseñado para su uso en redes donde tengas permiso para realizar descubrimiento y escaneo de red, como tu propia red doméstica. El escaneo no autorizado de redes puede ser ilegal y poco ético. Obtén siempre la autorización adecuada antes de usar esta herramienta en cualquier red.
Esta herramienta fue creada principalmente con fines educativos y para la exploración de redes domésticas. Aunque es funcional y útil, no debe considerarse una solución de monitoreo de red de nivel profesional. Los resultados se basan en técnicas de escaneo sin privilegios y pueden no ser exhaustivos. Para análisis de red crÃticos o evaluaciones de seguridad, considera usar herramientas profesionales establecidas con soporte formal.
Contribuciones
¡Las contribuciones y sugerencias, como solicitudes de funciones, informes de errores o mejoras, son bienvenidas! Siéntete libre de abrir issues o enviar pull requests en el repositorio de GitHub. Por favor, asegúrate de discutir cualquier cambio importante en un issue de GitHub antes de implementarlo.