Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
webscan — Escáner de red basado en navegador y detección de IP local | Kitploit
Herramientas/GitHubGitHub/samyk/webscan
OSINT (Inteligencia de Fuentes Abiertas)ReconocimientoMapeo de RedesRecopilación de Información
GitHubsamyk/webscan

webscan

Escáner de red basado en navegador y detección de IP local

Ver RepositorioSitio web
4726719hace 5 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

webscan

webscan es un escáner de IP de red basado en navegador y detector de IP local. Detecta IPs vinculadas al usuario/víctima escuchando en un canal de datos RTP a través de WebRTC y realizando un bucle de retorno al puerto a través de cualquier IP activa, así como descubriendo todas las direcciones IP activas en subredes válidas monitoreando tiempos de espera inmediatos (paquetes TCP RST devueltos) de llamadas fetch() o etiquetas img ocultas apuntadas a subredes/IPs válidas. Funciona en móvil y escritorio en todos los navegadores y sistemas operativos principales. La versión beta es extensible para permitir la adición de múltiples técnicas.

webscan aprovecha el hecho de que los sockets de etiquetas img que no responden pueden cerrarse para evitar la limitación de velocidad basada en navegador y red, alterando el atributo src a un URI que no sea de socket (eliminarlo del DOM irónicamente no cierra el socket), o usando el soporte de señal de fetch() de la interfaz AbortController().

prueba webscan en vivo aquí
versión beta aquí

por @SamyKamkar
publicado el 2020/11/07
más proyectos divertidos en samy.pl

webscan funciona de la siguiente manera

  1. webscan primero itera a través de una lista de direcciones IP de puerta de enlace comunes
  2. para cada IP, usa fetch() para hacer una conexión HTTP falsa a http://common.gateway.ip:1337
  3. si se devuelve un TCP RST, la promesa de fetch() será rechazada o el evento onerror de la etiqueta img se activará antes de un tiempo de espera, indicando una IP activa
  4. para evitar la limitación de velocidad del navegador o la red, los sockets fetch() que no responden se cierran mediante la señal AbortController() mientras que las etiquetas img tienen la src redirigida a un URI que no es de socket, cerrando el socket
  5. cuando se detecta una puerta de enlace activa, los pasos 1-3 se ejecutan de nuevo para cada IP en la subred (ej. 192.168.0.[1-255])
  6. se abre un canal de datos WebRTC en el navegador, abriendo un puerto aleatorio en la máquina de la víctima
  7. para cualquier IP que se encuentre activa en la subred, se realiza una conexión de canal de datos WebRTC a ese host
  8. si el canal de datos WebRTC tiene éxito, sabemos que acabamos de establecer una conexión a nuestra propia IP local

implementación

// wait for scan to finish
let scanResults = await webScanAll()
 
// or get callbacks when ips are found with a promise
let ipsToScan = undefined // scans all pre-defined networks if null
let scanPromise = webScanAll(
  ipsToScan, // array. if undefined, scan major subnet gateways, then scan live subnets. supports wildcards
  {
    rtc: true,   // use webrtc to detect local ips
    logger: l => console.log(l),  // logger callback
    noRedirect: false, // if true, doesn't redirect from http to http - Chrome doesn't scan detect network IPs proprly on https atm
    localCallback:   function(ip) { console.log(`local ip callback: ${ip}`)   },
    subnetCallback:  function(ip) { console.log(`router ip callback: ${ip}`)  },
    networkCallback: function(ip) { console.log(`network ip callback: ${ip}`) },
  }
)

devuelve

scanResults = {
  "local": ["192.168.0.109"], // local ip address
  "network": { // other hosts on the network and how fast they respond
    "192.168.0.1": 97,
    "192.168.0.2": 82,
    "192.168.0.100": 46,
    "192.168.0.109": 0,
    "192.168.0.117": 74,
    "192.168.0.113": 17,
    "192.168.0.112": 21,
    "192.168.0.114": 25,
    "192.168.0.116": 25,
    "192.168.0.115": 25,
    "192.168.0.105": 57,
    "192.168.0.107": 63,
    "192.168.0.103": 64,
    "192.168.0.108": 31
  }
}

Pendientes

  • usar iframe para realizar escaneos en bloques
    • cuando el frame se destruye, supongo que esto ayuda a garantizar que las conexiones se destruyan
    • ¿cómo funcionan múltiples iframes escaneando múltiples bloques? quizás esto nos permita evitar la limitación de velocidad de conexión del navegador
  • soportar tanto fetch() como img como núcleos de escáner (completado en beta)
    • Safari
      • nota: la etiqueta img funciona muy bien en algunos navegadores como Safari
      • advertencia: cambiar el .src no parece abortar la conexión
      • solución potencial: ver la nota del iframe arriba
    • Chrome
      • advertencia: Chrome no abortará la conexión si eliminas la img del DOM
      • solución: Chrome abortará la conexión de una img si ajustas el .src, ¡esto es genial!
      • advertencia: cambiar img.src a '#' hace otra solicitud a la misma página padre
      • advertencia: cambiar img.src a 'about:' produce una advertencia en la consola, ¿hay algo más que usar que no haga una solicitud?
  • usar el tiempo de img como mecanismo de detección de IP local

Probado en

  • Chrome 87.0.4280.47 (macOS)
  • Edge 86.0.622.63 (Windows)
  • Firefox 82.0.2 (macOS)
  • Firefox 82.0.2 (Windows 10)
  • Safari 13.1.2 (macOS)
  • mobile Safari (iOS)
  • mobile Chrome (iOS)
Descargar herramienta