
Escáner de red basado en navegador y detección de IP local
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
// 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
Probado en