
Browser-basierter Netzwerkscanner & lokale IP-Erkennung
webscan ist ein browserbasierter Netzwerk-IP-Scanner und lokaler IP-Detektor. Er erkennt IPs, die an den Benutzer/das Opfer gebunden sind, indem er auf einem RTP-Datenkanal über WebRTC lauscht und auf den Port über alle Live-IPs zurückloopt, sowie alle Live-IP-Adressen auf gültigen Subnetzen erkennt, indem er auf sofortige Timeouts (zurückgegebene TCP-RST-Pakete) von fetch()-Aufrufen oder versteckten img-Tags überwacht, die auf gültige Subnetze/IPs verweisen. Funktioniert auf Mobilgeräten und Desktops in allen gängigen Browsern und Betriebssystemen. Die Beta-Version ist erweiterbar, um mehrere Techniken hinzuzufügen.
webscan nutzt die Tatsache aus, dass nicht reagierende img-Tag-Sockets geschlossen werden können, um browser- und netzwerkbasierte Ratenbegrenzung zu verhindern, indem das src-Attribut auf eine Nicht-Socket-URI geändert wird (das Entfernen aus dem DOM schließt den Socket ironischerweise nicht), oder durch die Verwendung der signal-Unterstützung von fetch() der AbortController()-Schnittstelle.
webscan live testen
Beta-Version hier
von @SamyKamkar
veröffentlicht am 2020/11/07
weitere lustige Projekte unter samy.pl
webscan funktioniert wie folgt
// 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}`) },
}
)
Rückgabewert
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
}
}
Aufgaben
Getestet auf