webscan 是一款基于浏览器的网络IP扫描器和本地IP检测器。它通过WebRTC监听RTP数据通道并回环到任何活跃IP的端口来检测绑定到用户/受害者的IP,同时通过监测来自 fetch() 调用或指向有效子网/IP的隐藏 img 标签的即时超时(返回的TCP RST数据包)来发现有效子网上的所有活跃IP地址。可在所有主流浏览器和操作系统上的移动端和桌面端运行。Beta版本可扩展,允许添加多种技术。
webscan利用了这样一个事实:通过将src属性更改为非套接字URI(讽刺的是,从DOM中移除并不会关闭套接字),或者使用fetch()的signal来支持AbortController()接口,从而关闭无响应的img标签套接字,以防止浏览器和网络速率限制。
由 @SamyKamkar 发布
发布于 2020/11/07
更多有趣项目请访问 samy.pl
webscan的工作原理如下
// 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}`) },
}
)
返回
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
}
}
待办事项
已在以下环境测试