​​​​​​ 基于Nmap的异步无状态端口扫描技术

news2024/11/22 0:04:11

​​​​​​ 基于Nmap的异步无状态端口扫描技术

传统的端口扫描,主要是依靠TCP三次握手去连接,而建立连接的各个过程都存在连接状态,这些状态由操作系统在底层实现存储,可利用这些状态对应用层的数据进行处理。但是,这需要消耗大量的系统资源。一般的操作系统中,系统TCP/IP协议栈能同时保持的连接数只有几十或几百,即便是网络应用服务器,默认保持的连接数只有1500左右,很容易达到连接数的上限。因此,传统的端口扫描方式在扫描速度上受到了极大的限制。

针对上述问题,产生了一种基于无状态的端口扫描方式。无状态是指不需要操作系统关心TCP连接的状态。这种方式所建立的连接不占用操作系统的TCP/IP协议栈资源,而是应用程序在底层直接进行管理和维持,不需要操作系统对连接状态进行会话组包。在实现上,是把关键的状态位及数据信息通过程序直接放在数据包的本身。通过这种方式,能同时保持的连接数不再受操作系统的限制。应用程序直接从底层进行数据组包,并对连接进行维持和管理,决定连接的数量,从而使扫描速度得到极大的提高。

1)异步无状态端口扫描技术

扫描过程中,向目标服务器发送数据包,若采用有状态的扫描方式,需等待目标服务器的回复,要设置timeout参数。当进行大量扫描时,等待时间会成为提高扫描速率的瓶颈,即使使用多线程也会很慢,所以采用异步的无状态的扫描方式来提升扫描速度。

启动程序后,对每一个网卡建立一个异步处理的线程对,分别是发送数据包线程和接收数据包线程。如果目标服务器的端口是开放的就会返回响应数据包,响应数据包由接收数据包线程接收,并解析收到的数据包。发送数据包线程只负责发送,接收数据包线程只接收特定TCP flags字段的数据包,两者之间没有交互,这样就没有了等待回复的时间,程序工作流程图如下图所示:

  • 1 数据包收发流程

地址随机化算法是将扫描目标的所有IP和PORT组成的目标地址进行随机化,组装数据包发送建立连接的请求。

发送数据包线程的执行过程如下:

(1)初始化变量;

(2)创建一个指向外部变量的指针,用于通知线程内的发送数据包的数量以及当前的发送速度等信息;

(3)初始化用户的IP和端口;

(4)设置数据包的发送速度,当速度过大,本地流量达不到要求时,会导致部分数据包丢失;

(5)计算扫描任务的扫描数量,即扫描的IP数与每个IP的端口数的乘积:NUM(IP)*NUM(PORT);

(6)循环本次扫描任务的扫描数量;

(7)执行完本次循环后,执行下一扫描范围循环;

(8)将发送队列中的剩余数据包发送出去。

接收数据包线程的执行过程如下:

(1)初始化变量;

(2)创建一个指向外部变量的指针,用于通知线程内的接收数据包的数量以及当前的接收速度等信息;

(3)将发送数据包线程分配到偶数编号的CPU,将接收数据包线程分配到奇数编号的CPU,实现更好的异步操作;

(4)利用pcap文件接收原生数据包,并创建接收表对异步操作导致的重复响应进行最优去重;

(5)如果是离线模式,等待发送线程结束后就关闭;

(6)接收数据包,执行一个while循环。

2)基于Nmap的异步无状态端口扫描技术

端口扫描有很多方法,常用的端口扫描方法以及扫描工具各有优缺点。Nmap能够主机发现,支持多端口、多网段的端口扫描,可对目标域名进行扫描;能够识别端口服务类型及版本、操作系统、设备类型等,但是如果进行大网段全端口扫描,Nmap的扫描能力就受到限制,扫描周期过长。通过前面对目标的信息收集,发现一个目标可能与多个主机相关。一个主机有65535个端口,所以,为了增大全面探测主机的效率,先采用基于异步无状态的端口扫描方式:构造相应flag的TCP报文发送到目标主机的所有端口。

通过对目标主机的所有端口采用异步无状态的端口扫描,得到目标主机所有的开放端口信息,并对开放的端口进行侦测,用来识别各个端口上所运行的服务及其版本。一般来说,每一个服务都有一个固定的默认端口。Nmap可以检测数百种应用协议,识别数千种应用的签名。调用Nmap的API进行端口探测,可以有效的识别目标主机上各个端口所运行的服务和版本。

操作系统是根据banner和fingerprint进行探测。如果直接抓到banner信息,那么很大概率上可以直接得到操作系统的类型和版本。但是如果没有,就要根据已知的指纹信息,来进行对应的推测。Nmap提供了上千种设备的指纹数据,通过调用Nmap的API对目标主机进行操作系统探测,能够有效的识别操作系统类型和版本号。

端口和操作系统探测采用基于异步无状态端口扫描和Nmap相结合的方法,工作流程如下图所示:

  • 2 端口扫描流程

(1)用户输入目标,判断目标合法性。目标是前面信息收集到的所有目标相关IP。

(2)采用基于异步无状态的端口扫描方式,对全部IP进行扫描,包括每个主机的65535个端口,得到所有主机的开放端口信息。

(3)调用Nmap的API,探测开放端口的服务以及主机的操作系统类型和版本号。这里需安装python_nmap包,支持Python2.x以及3.x版本,python_nmap包提供了Python调用Nmap的一系列接口。代码中用到的重要的类以及方法分别是class PortScanner()和scan()。class PortScanner()用于创建Nmap扫描器,scan()用于设置扫描方法。

(4)结果存入数据库。

3)与Nmap端口扫描的性能比较

单独使用Nmap对主机进行扫描时,由于扫描效率低,一般只会扫描常用的1000个端口,平均每台主机耗时150秒。但是,运维工程师考虑到安全问题会更改服务的默认端口号。为保证扫描结果的全面性,本系统对全端口进行扫描。

  • 3 端口扫描

对同一台主机,使用Nmap进行全端口扫描至少耗时2个小时,扫描效率比较低。采用异步无状态端口扫描和Nmap相结合方法,效率会大幅提升。如上图所示,利用异步无状态端口扫描方式,一台主机用时只有几十秒,比Nmap快了好多倍。如下图所示,针对开放端口,使用Nmap进行端口服务、操作系统类型和版本探测,平均只需2秒。实验证明,采用异步无状态端口扫描和Nmap相结合的方法比单独使用Nmap提高了近百倍。

  • 4 端口扫描

综上,基于Nmap的异步无状态端口扫描技术,相比单独使用Nmap提高性能近百倍,实现端口扫描以及空间资产测绘速率的大幅提升。

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

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

相关文章

2024-06-07 Unity 编辑器开发之编辑器拓展8 —— Scene 窗口拓展

文章目录 1 Handles 类1.1 Scene 响应函数1.2 自定义窗口中监听 Scene1.3 Handles 常用 API2.2.1 颜色控制2.2.2 文本2.2.3 线段2.2.4 虚线2.2.5 圆弧2.2.6 圆2.2.7 立方体2.2.8 几何体2.2.9 移动、旋转、缩放2.2.10 自由移动 / 旋转 2 Scene 窗口中显示 GUI3 HandleUtility4 G…

AI产品经理岗位需求量大吗?好找工作吗?

前言 在当今这个科技日新月异的时代,人工智能(AI)已不再仅仅是一个遥远的概念,而是深深嵌入到我们生活的方方面面,从日常的语音助手到复杂的自动驾驶系统,AI的触角无处不在。随着AI技术的广泛应用和持续进…

react native中内容占位效果

react native中内容占位效果 效果实例图实例代码skeleton.jsx 效果实例图 实例代码skeleton.jsx import React, { useEffect, useRef } from "react"; import { Animated, StyleSheet, View } from "react-native"; import { pxToPd } from "../../.…

“开源与闭源:AI大模型发展的未来之路“

文章目录 每日一句正能量前言数据隐私开源大模型与数据隐私闭源大模型与数据隐私数据隐私保护的共同考虑结论 商业应用开源大模型的商业应用优势:开源大模型的商业应用劣势:闭源大模型的商业应用优势:闭源大模型的商业应用劣势:商…

vue3+ts 拖拽容器边缘,改变容器宽度和高度

例如:我们的代码编辑器 终端与代码区,可以纵向拖拽,改变两个容器高度 目录与代码区可以横向拖拽,改变两个容器宽度 本文使用vue3tstailwindcss,把横向纵向整合在一起写了,也可以分开使用 utils目录下新建…

【AIoT-Robot】3d hand pose

手语是聋哑人士的主要沟通工具,它是利用手部和身体的动作来传达意义。虽然手语帮助它的使用者之间互相沟通,但聋哑人士与一般人的沟通却十分困难,这个沟通障碍是源于大部分人不懂得手语。 1. 手势&&手语 手势:手的姿势 ,通常称作手势。它指的是人在运用手臂时,所…

基因分析平台开发1 - Layui WebUI组件库快速地构建网页界面

介绍一个Web UI库,可快速实现基因分析平台前端部分的开发,借助帮助文档,快速实现自己想要效果。 1. Layui 简介 Layui 是一套免费的开源 Web UI 组件库,可用于更简单快速地构建网页界面,全部主流 Web 浏览器&#xf…

【Java】解决Java报错:ClassCastException

文章目录 引言1. 错误详解2. 常见的出错场景2.1 错误的类型转换2.2 泛型集合中的类型转换2.3 自定义类和接口转换 3. 解决方案3.1 使用 instanceof 检查类型3.2 使用泛型3.3 避免不必要的类型转换 4. 预防措施4.1 使用泛型和注解4.2 编写防御性代码4.3 使用注解和检查工具 5. 示…

这才是计科之 Onix XV6 源码分析(1、XV6-x86的启动)

这才是计科之 Onix & XV6 源码分析(1、XV6-x86的启动) 前言 Onix是一款相对于XV6来说功能更为健全的单核OS,由于功能更加完善,Onix也更加复杂。代码阅读起来会比较绕。 XV6是一款简单易读的多核操作系统,但其功…

openh264 降噪功能源码分析

文件位置 ● openh264/codec/processing/denoise/denoise.cpp ● openh264/codec/processing/denoise/denoise_filter.cpp 代码流程 说明:从代码流程可以看到,实现降噪的核心功能主要就是BilateralDenoiseLuma、WaverageDenoiseChroma两个函数。 原理…

[word] word大括号怎么打两行 #其他#其他#微信

word大括号怎么打两行 Word给用户提供了用于创建专业而优雅的文档工具,帮助用户节省时间,并得到优雅美观的结果。 一直以来,Microsoft Office Word 都是最流行的文字处理程序。 作为 Office 套件的核心程序, Word 提供了许多易…

ChatGPT-4o提示词的九大酷炫用法,你知道几个?

ChatGPT-4o提示词的九大酷炫用法,你知道几个?🚀 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典…

android antirollback verno 获取方法

ReadRollbackIndex.exe 获取 调查avbVBMeta结构体 typedef struct AvbVBMetaImageHeader { /* 0: Four bytes equal to "AVB0" (AVB_MAGIC). */ uint8_t magic[AVB_MAGIC_LEN]; /* 4: The major version of libavb required for this header. */ uint32_t…

rtl8723DU移植 android4.4 4418 (第二部分蓝牙部分)

使用的代码: HMI (8723bu)源码 567_RTL8723DU_WiFi_linux_v5.6.5.3_35502_COEX20181130-2e2e.20191025.zip 由于之前写的所有笔记没有保存,这里只能是部分。 0、 前置知识 1 、kernel 的移植 2、hardwire的移植 将 驱动中的 h…

大功率回馈式负载:行业竞争态势

随着科技的不断发展,大功率回馈式负载在各个行业中的应用越来越广泛。大功率回馈式负载是一种能够将电能回馈到电网的设备,具有节能、环保、高效等优点。然而,随着市场竞争的加剧,大功率回馈式负载行业也面临着诸多挑战。 首先&am…

QSqlDatabase、QSqlQuery、QSqlRecord、Sqlite用法

使用QSqlDatabase、QSqlQuery、QSqlRecord、Sqlite数据库实现一个简单的界面查询 1. 创建Sqlite数据库,表 mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include "QSqlDatabase" #include "QSqlQuery&q…

AVL树【C++实现】

文章目录 AVL树的概念AVL树节点的定义AVL树的插入AVL树的旋转新节点插入较高右子树的右侧---右右:左单旋新节点插入较高左子树的左侧---左左:右单旋新节点插入较高左子树的右侧---左右:先左单旋再右单旋新节点插入较高右子树的左侧---右左&am…

springboot停车微信小程序小程序-计算机毕业设计源码92714

摘 要 在信息飞速发展的今天,网络已成为人们重要的信息交流平台。每天都有大量的农产品需要通过网络发布,为此,本人开发了一个基于springboot停车微信小程序小程序。 对于本停车微信小程序的设计来说,它主要是采用后台采用java语…

因你而变 共赴新程 | AidLux全新版本震撼发布!

历经400多个日夜,AidLux 2.0(基础版)终于要与大家见面了。 开发者们问过无数次,新版本何时发布,期待的功能何时上线……在此,让我先真诚地感谢大家长期以来的期待与关心! 一年多以来&#xff…