netmap.js:基于浏览器的网络发现工具

netmap.js是一款基于浏览器,用于提供主机发现和端口扫描功能的网络发现工具。

netmap.js的执行速度也非常的快,由于其使用了es6-promise-pool,因此它可以有效地运行浏览器允许的最大并发连接数。

动机

由于我正需要一个基于浏览器的端口扫描程序来处理我的工作,但我认为直接从BeEF等其他项目导入现有模块或复制粘贴它们太过简单。事实也证明,当前并没有一个像样的即用型npm模块,BeEF中的port_scanner模块(在撰写本文时)不准确,速度慢,且不适用于Chromium。

而netmap.js则是一个优化的“ping”sweeper和TCP扫描器,并且适用于所有现代的浏览器。

快速开始
安装

需要安装包找我

查找实时主机

让我们从家庭环境中找出网站访问者网关的IP地址:

 
  1. import NetMap from 'netmap.js'
  2. const netmap = new NetMap()
  3. const hosts = ['192.168.0.1', '192.168.0.254', '192.168.1.1', '192.168.1.254']
  4. netmap.pingSweep(hosts).then(results => {
  5. console.log(results)
  6. })
 
  1. {
  2. "hosts": [
  3. { "host": "192.168.0.1", "delta": 1003, "live": false },
  4. { "host": "192.168.0.254", "delta": 1001, "live": false },
  5. { "host": "192.168.1.1", "delta": 18, "live": true },
  6. { "host": "192.168.1.254", "delta": 1002, "live": false }
  7. ],
  8. "meta": {}
  9. }

主机192.168.1.1似乎当前正处于活动状态。

扫描TCP端口

让我们尝试扫描主机上开放的TCP端口:

 
  1. import NetMap from 'netmap.js'
  2. const netmap = new NetMap()
  3. const hosts = ['192.168.1.1', '192.168.99.100', 'google.co.uk']
  4. const ports = [80, 443, 8000, 8080, 27017]
  5. netmap.tcpScan(hosts, ports).then(results => {
  6. console.log(results)
  7. })
 
  1. {
  2. "hosts": [
  3. {
  4. "host": "192.168.1.1",
  5. "control": "22",
  6. "ports": [
  7. { "port": 443, "delta": 15, "open": false },
  8. { "port": 8000, "delta": 19, "open": false },
  9. { "port": 8080, "delta": 21, "open": false },
  10. { "port": 27017, "delta": 26, "open": false },
  11. { "port": 80, "delta": 95, "open": true }
  12. ]
  13. },
  14. {
  15. "host": "192.168.99.100",
  16. "control": "1001",
  17. "ports": [
  18. { "port": 8080, "delta": 40, "open": true },
  19. { "port": 80, "delta": 1001, "open": false },
  20. { "port": 443, "delta": 1000, "open": false },
  21. { "port": 8000, "delta": 1004, "open": false },
  22. { "port": 27017, "delta": 1000, "open": false }
  23. ]
  24. },
  25. {
  26. "host": "google.co.uk",
  27. "control": "1001",
  28. "ports": [
  29. { "port": 443, "delta": 67, "open": true },
  30. { "port": 80, "delta": 159, "open": true },
  31. { "port": 8000, "delta": 1001, "open": false },
  32. { "port": 8080, "delta": 1002, "open": false },
  33. { "port": 27017, "delta": 1000, "open": false }
  34. ]
  35. }
  36. ],
  37. "meta": {}
  38. }

起初,结果看起来似乎有点矛盾。

192.168.1.1是本地网段上的嵌入式Linux机器(路由器),唯一打开的端口是80。我们可以看到与其他关闭的端口相比,浏览器在80上的错误时间大约延长了5倍。

192.168.99.100是一个host-only VM,开放了8080端口,google.co.uk是外部主机,443和80都为开放状态。在这种情况下,浏览器在开放端口上相对快速地抛出一个错误,而关闭的端口只是超时。

为了确定端口应该标记为打开还是关闭,netmap.js将扫描一个假定为关闭的“control”端口(默认为45000)。然后,使用控制时间确定其他端口的状态。如果比率delta/control大于设定值(默认值为0.8),则假定端口关闭(tl;dr: 与控制时间相差20%以上则表示端口已打开)。

限制
端口黑名单列表

浏览器维护者一个拒绝连接的端口黑名单列表(如ftp、ssh或smtp)。如果使用默认协议(HTTP)尝试使用netmap.js扫描这些端口,将会返回一个非常短暂的超时。这通常是端口关闭的标志,但对于黑名单端口,这并不意味着什么。

你可以从以下链接查看黑名单列表:

Chromium source

Mozilla docs

Edge/IE(如果你找到了请将地址发送给我,非常感谢!)

在Firefox 61(或其他一些浏览器)之前,可以通过使用ftp协议而不是http来建立连接从而绕过这个限制。在实例化NetMap时,可以在options对象中指定协议。当使用ftp时,你应该期望打开的端口超时,关闭的端口相对较快地出错。FTP扫描还受到本文中讨论的TCP RST数据包的限制。

“传统”协议(如ftp)的子资源请求已在Chromium中被阻塞了一段时间。

"Ping" Sweep

netmap.js提供的“ping”扫描功能在快速查找本地网段(其他计算机,电话,路由器,打印机等)上基于 *nix的实时主机方面表现相当不错。

但由于实现的原因,当不返回TCP RST数据包时这将不起作用。典型:

Windows机器

一些外部主机

某些网络设置,例如桥接/host-only VMs

其原因在以下理论部分进行了解释。

此限制不会影响TCP扫描功能,并且仍然可以通过尝试查找其开放端口来确定上述主机是否处于活动状态。

使用
NetMap构造函数

NetMap构造函数采用一个允许你配置的options对象:

用于扫描的协议(默认为http,请参阅端口黑名单,了解为什么要将其设置为ftp)

端口连接超时(默认为1000毫秒)

 
  1. import NetMap from 'netmap.js'
  2. const netmap = new NetMap({
  3. protocol: 'http',
  4. timeout: 3000
  5. })

pingSweep()

pingSweep()方法用于确定给定的主机阵列是否有效,其主要是通过检查与端口的连接是否超时来实现的。在这种情况下,主机被认为是离线状态(参见"Ping" Sweep了解限制和理论的标准情况)。

该方法采用以下参数:

hosts数组要扫描的主机阵列(IP地址或主机名);

options对象: 

maxConnections - 最大并发连接数(默认情况下Chrome上为10个,其他浏览器为17个 - 浏览器支持的最大并发连接数)

要扫描的端口(默认为45000)

它返回一个promise对象。

 
  1. netmap.pingSweep(['192.168.1.1'], {
  2. maxConnections: 5,
  3. port: 80
  4. }).then(results => {
  5. console.log(results)
  6. })

tcpScan()

tcpScan()方法将针对一系列目标执行端口扫描。请阅读标准案例以了解它是如何做到这一点的。

该方法采用以下参数:

hosts数组要扫描的主机阵列(IP地址或主机名);

要扫描的端口列表(1-65535之间的整数,避免以上黑名单中的端口);

options对象: 

maxConnections - 最大并发连接数(默认为6 - 每个域浏览器允许的最大连接数)

portCallback - 当完成host:port组合的扫描时要执行的回调

controlPort - 要扫描的端口,以确定基线关闭端口增量(默认为45000)

controlRatio - 要被视为已关闭端口的控制增量的相似性(百分比)(默认值为0.8,请参见以上示例部分)

它返回一个promise对象。

 
  1. netmap.tcpScan(['192.168.1.1'], [80, 27017], {
  2. maxConnections: 5,
  3. portCallback: result => {
  4. console.log(result)
  5. },
  6. controlPort: 45000,
  7. controlRatio: 0.8
  8. }).then(results => {
  9. console.log(results)
  10. })
理论

以下部分将为大家简要介绍模块发现技术背后的理论知识。

总体思路

此模块使用Image对象尝试请求跨源资源(测试中的一系列http://{host}:{port} URLs)。浏览器引发错误(delta增量)或在某个超时值后缺少错误所需时间,提供了对正在审查的主机和端口状态的深入了解。

标准情况

当尝试连接到封闭端口时,活动主机通常会使用TCP RST数据包进行相对快速的响应。

如果端口是打开的,即使它没有运行HTTP服务器,由于建立了完整TCP连接的开销,以及随后意识到无法从提供的URL中获取图像中获取Image,浏览器将需要花费更长的时间来引发错误。

而离线主机则不会响应RST,也不允许建立完整的TCP连接。在超时(~90秒)之前,浏览器仍会尝试建立连接。netmap.js默认等待1000毫秒后会超时。

综上所述:

实时主机上的关闭端口将有一个非常短的delta增量

实时主机上的开放端口将具有稍长的delta增量

离线主机或未使用的IP地址将会超时

没有TCP RST的情况

一些主机(如google.co.uk或Windows主机)和一些网络设置(如VirtualBox host-only网络)在命中关闭端口时,并不会返回TCP RST数据包。

在这种情况下,关闭端口通常会超时,而开放端口则会快速引发错误。

因此,当不返回RST数据包时,pingSweep()方法的实现是不可靠的。

总之,当出于任何原因未返回TCP RST数据包时:

实时主机上的关闭端口将超时

实时主机上的开放端口将有一个短的delta增量

pingSweep()将无法区分关闭端口超时和“dead”主机超时

WebSockets和Ajax

应该有很好的文档说明,你还能够使用WebSockets和Ajax来映射网络。

我做了一次尝试(也调整了BeEF来尝试它的端口扫描模块,只使用WebSockets和Ajax);我发现这两种方法产生的结果非常的不可靠。

如果我在这方面有所遗漏,请告诉我。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

 读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

大厂面试题

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~ 

 读者福利 | CSDN:《网络安全入门&进阶学习资源包》免费分享~~(安全链接,放心点击)

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/60666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mapbox进阶技巧

1、filter过滤&#xff0c;使用过滤&#xff0c;可以根据不同条件展示我们想要展示的数据 代码示例&#xff1a;核心代码&#xff0c;根据点的size是否满足条件进行展示 filter: [<, size, 30] <!DOCTYPE html> <html lang"en"><head><me…

计算机网络 (2)计算机网络的类别

计算机网络的类别繁多&#xff0c;根据不同的分类原则&#xff0c;可以得到各种不同类型的计算机网络。 一、按覆盖范围分类 局域网&#xff08;LAN&#xff09;&#xff1a; 定义&#xff1a;局域网是一种在小区域内使用的&#xff0c;由多台计算机组成的网络。覆盖范围&#…

实战OpenCV之文字识别

基础入门 文字识别技术,也称为光学字符识别(Optical Character Recognition,OCR),是一种让计算机能够“读取”图像中的文字,并将其转化为可编辑文本的技术。这项技术在许多领域都有广泛的应用,包括但不限于:图片文字识别、文档管理、自动化数据输入、历史文献数字化。 …

【Qt】Qt在窗口中加载Web界面的方法汇总

1、Qt WebEngine 1)Qt版本:Qt5.4以上; 2)平台要求(https://doc.qt.io/archives/qt-5.9/qtwebengine-platform-notes.html): 例如:Windows下只能使用 MSVC 编译器,不支持MinGW编译器,会报错(: error: Unknown module(s) in QT: webenginewidgets) 并且不能用在Qt编…

modbus协议 Mthings模拟器使用

进制转换 HEX 16进制 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15) dec 10进制 n(16进制) -> 10 abcd.efg(n) d*n^0 c*n^1 b*n^2 a*n^3 e*n^-1 f*n^-2 g*n^-3&#xff08;10&#xff09; 10 -> n(16进制) Modbus基础概念 高位为NUM_H&…

飞腾平台Arm NN软件栈安装使用指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

基于JavaSpringboot个人博客

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xf…

鸿蒙next ui安全区域适配(刘海屏、摄像头挖空等)

目录 相关api 团结引擎对于鸿蒙的适配已经做了安全区域的适配,也考虑到了刘海屏和摄像机挖孔的情况,在团结引擎内可以直接使用Screen.safeArea 相关api

吴恩达Prompt Engineering(2/9): Guidelines for Prompting

目录 Principals of Prompting Principle 1 Tactic 1: Tactic 2: Ask for structured output Tactic 3: Check whether conditions are satisfied / Check assumptions required to do the task Tactic 4: Few-Shot prompting, Give successful examples of completing tas…

【GPTs】Gif-PT:DALL·E制作创意动图与精灵动画

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Gif-PT主要功能适用场景优点缺点 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 使用Dalle生成用户请求的精灵图动画&#…

JMeter初体验:从入门到入门的性能测试之旅

一、关于性能测试 1、性能测试概述 性能测试是一种非功能测试&#xff0c;旨在评估系统在不同负载条件下的性能表现。它包括负载测试、压力测试、稳定性测试和基准测试等。性能测试的目的是确保系统在预期的负载下能够正常运行&#xff0c;并满足用户对响应时间、吞吐量和其他…

MongoDB新版本安装配置教程(7.0.15版本-zip下载)

找了半天MongoDB新版本怎么解决没有mongo命令,都没有很好的解决方法 现在分享一下: 首先下载: 然后手动创建 data 和 log 两个文件夹 然后再系统变量配置环境变量 在data的目录下&#xff0c;创建一个db文件 然后:在bin目录下cmd执行: mongod --dbpath D:\MongoDB\data\db …

探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解

文章目录 前言一、GET 方法&#xff1a;用于获取资源二、POST 方法&#xff1a;用于提交数据三、PUT 方法&#xff1a;用于更新资源四、DELETE 方法&#xff1a;用于删除资源五、PATCH 方法&#xff1a;用于部分更新资源六、HEAD 方法&#xff1a;用于请求响应头七、OPTIONS 方…

解决虚拟机未被自动分配ip

文章目录 1. 背景2. 解决步骤 1. 背景 从vulnhub下载的靶场文件&#xff0c;网络适配器模式设置为nat模式之后&#xff0c;启动虚拟机之后发现没有成功分配动态ip。推测是虚拟机分配的网卡名称和原先靶机作者设置网络配置文件 网络接口名称不一致导致。 2. 解决步骤 解决办法就…

路径规划——RRT-Connect算法

路径规划——RRT-Connect算法 算法原理 RRT-Connect算法是在RRT算法的基础上进行的扩展&#xff0c;引入了双树生长&#xff0c;分别以起点和目标点为树的根节点同时扩展随机树从而实现对状态空间的快速搜索。在此算法中以两棵随机树建立连接为路径规划成功的条件。并且&…

2024游戏陪玩app源码的功能介绍/线上陪玩交友上线即可运营软件平台源码搭建流程

一个完整的陪玩交友系统从概念到实现再到维护的全过程得以清晰展现。每一步都需要团队的紧密协作与细致规划&#xff0c;以确保系统既满足用户需求&#xff0c;又具备良好的稳定性和可扩展性。 基础框架 移动端开发框架&#xff1a;如uniapp&#xff0c;它支持多平台开发&…

缓冲式线程池C++简易实现

前言 : 代码也比较短&#xff0c;简单说一下代码结构&#xff0c;是这样的&#xff1a; SyncQueue.hpp封装了一个大小为MaxTaskCount的同步队列&#xff0c;这是一个模板类&#xff0c;它在线程池中承担了存放任务等待线程组中的线程来执行的角色。最底层是std::list<T>…

Unity资源打包Addressable AA包

从零到一 很多资料都是通过一步步设置讲解的&#xff0c;有时很想先快速实现&#xff0c;再了解细节。 下面就是远程加载Cube.prefab然后实例化简单的代码。 代码中可以不需要远程的网址&#xff0c;不需要资源下载的位置&#xff0c;不需要判断是否已经下载到本地。 那是如…

国家网络安全法律法规

国家网络安全法律法规是维护网络空间安全、保障国家利益和公民权益的重要基石。以下是一些主要的国家网络安全法律法规&#xff1a; 一、《中华人民共和国网络安全法》发布时间与生效日期&#xff1a;2016年11月7日由第十二届全国人民代表大会常务委员会第二十四次会议通过&…

MySQL之索引(2)(B树、B+树、索引分类、聚集索引、二级索引、回表查询)

目录 一、B树结构索引&#xff08;B-树&#xff09; &#xff08;1&#xff09;特点。 &#xff08;2&#xff09;问题&#xff1a;范围查询效率&#xff1f;&#xff1f; &#xff08;3&#xff09;缺点。 1、查询的不稳定性。 2、各叶子节点无联系。 3、IO资源的消耗较多。 二…