Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/samyk/webscan
OSINT (开源情报)侦察网络映射信息收集
GitHubsamyk/webscan

webscan

基于浏览器的网络扫描器和本地IP检测

查看仓库网站
4726765年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

webscan

webscan 是一款基于浏览器的网络IP扫描器和本地IP检测器。它通过WebRTC监听RTP数据通道并回环到任何活跃IP的端口来检测绑定到用户/受害者的IP,同时通过监测来自 fetch() 调用或指向有效子网/IP的隐藏 img 标签的即时超时(返回的TCP RST数据包)来发现有效子网上的所有活跃IP地址。可在所有主流浏览器和操作系统上的移动端和桌面端运行。Beta版本可扩展,允许添加多种技术。

webscan利用了这样一个事实:通过将src属性更改为非套接字URI(讽刺的是,从DOM中移除并不会关闭套接字),或者使用fetch()的signal来支持AbortController()接口,从而关闭无响应的img标签套接字,以防止浏览器和网络速率限制。

在此尝试webscan在线版
Beta版本在此

由 @SamyKamkar 发布
发布于 2020/11/07
更多有趣项目请访问 samy.pl

webscan的工作原理如下

  1. webscan首先遍历常见网关IP地址列表
  2. 对于每个IP,使用fetch()向http://common.gateway.ip:1337发起伪造的HTTP连接
  3. 如果返回TCP RST,fetch()的promise将被拒绝,或者img标签的onerror将在超时前触发,表明该IP活跃
  4. 为防止浏览器或网络速率限制,无响应的fetch()套接字通过AbortController()信号关闭,而img标签的src被重定向到非套接字URI以关闭套接字
  5. 检测到活跃网关后,对子网上的每个IP重复步骤1-3(例如 192.168.0.[1-255])
  6. 在浏览器上打开WebRTC数据通道,在受害者机器上打开一个随机端口
  7. 对于子网上发现的任何活跃IP,建立到该主机的WebRTC数据通道连接
  8. 如果WebRTC数据通道成功,我们知道刚刚建立了到我们本地IP的连接

实现

root@kitploit:~
// 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}`) },
  }
)

返回

root@kitploit:~
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
  }
}

待办事项

  • 使用iframe分块执行扫描
    • 当frame被销毁时,我认为这有助于确保连接被销毁
    • 多个iframe扫描多个块如何工作?也许这允许我们绕过浏览器连接速率限制
  • 支持同时使用fetch()和img作为扫描核心(已在beta中完成)
    • Safari
      • 注意:img标签在某些浏览器如Safari中效果很好
      • 注意事项:更改.src似乎不会中止连接
      • 潜在解决方案:参见上面的iframe说明
    • Chrome
      • 注意事项:如果从DOM中移除img,Chrome不会中止连接
      • 解决方案:如果调整.src,Chrome会中止img的连接,这很棒!
      • 注意事项:将img.src更改为'#'会向相同父页面发起另一个请求
      • 注意事项:将img.src更改为'about:'会在控制台中产生警告,是否有其他不会发起请求的替代方案?
  • 使用img定时作为本地IP检测机制

已在以下环境测试

  • 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)
下载工具