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

​​​​​​ 基于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.mzph.cn/pingmian/24125.shtml

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

相关文章

企业必备技能-打造全屏轮播图的终极指南

标题:“视觉盛宴:打造全屏轮播图的终极指南” 引言 在网页设计中,轮播图是一种常见的视觉元素,它能够吸引访客的注意力并展示重要内容。本文档将指导你如何使用HTML和CSS快速创建一个全屏轮播图,使您的网站更加生动和…

算法学习笔记(7.4)-贪心算法(区间调度问题)

目录 ##什么是区间调度问题 ##贪心解法 ##具体的例题示例讲解 ##452. 用最少数量的箭引爆气球 - 力扣(LeetCode) ##435. 无重叠区间 - 力扣(LeetCode) ##56. 合并区间 - 力扣(LeetCode) ##什么是区间调…

毫米波雷达深度学习技术-1.6目标识别2

1.6.4 自动编码器和变体自动编码器 自编码器包括一个编码器神经网络,随后是一个解码器神经网络,其目的是在输出处重建输入数据。自动编码器的设计在网络中施加了一个瓶颈,它鼓励原始输入的压缩表示。通常,自编码器旨在利用数据中的…

学习周报:文献阅读+Fluent案例+Fluent相关算法学习

目录 摘要 Abstract 文献阅读:求解正逆运动波问题的物理信息神经网络 文献摘要 讨论|结论 理论基础 KWM(运动波动方程) Hard constraint (硬约束方式) 具有重新分布的搭配点的PINN 具有停止梯度的分数阶方程 …

实验二、网络属性设置《计算机网络》

精神状态 be like:边写边崩溃,越写越得劲儿。 目录 一、实验目的: 二、实验内容 三、实验步骤: 四、实验小结 一、实验目的: 掌握 IP 地址、子网掩码等网络属性的设置。 二、实验内容 预备知识: 1、…

耐酸碱腐蚀可溶性聚四氟乙烯(PFA)溶样罐

PFA溶样罐也叫PFA溶样瓶,可直接放在加热板上及油浴里加热,也可液氮下长期保存,使用温度-200—260℃。 根据不同实验的需求,PFA溶样罐有U型、V型、平底3种设计。V型底的设计,更加方便少量样品的集中收集。溶样罐广泛用…

Java 实验8 集合类

(一)实验目的 1、掌握JAVA集合类中的Collection的特点及其应用情形; 3、掌握Collection、熟悉集合的特点及应用。 (二)实验内容和步骤 1、仿照课堂练习的MyStack示例,使用LinkedList集合类实现一个先进…

探索多头混合专家(MH-MoE)模型的先进架构

在深度学习领域,大型模型如大型语言模型(LLMs)和大型多模态模型(LMMs)因其在各个领域的有效性而受到广泛关注。然而,这些模型在训练和推理时面临着巨大的计算成本。为了解决这一问题,研究者们提…

多分类混淆矩阵详解

⭐️ 前言 在机器学习和数据科学中,混淆矩阵(Confusion Matrix)是一个重要的工具,用于评估分类模型的性能。特别是在多分类问题中,混淆矩阵能够清晰地展示模型在每个类别上的预测结果。以下是对多分类混淆矩阵的详细解…

IDEA下项目发送到Gitee

一、首先在Gitee创建一个仓库(什么都不选,这是最简单的方式,否则需要 pull push等一些操作,我嫌麻烦) 二、按图点击(创建存储区,选择你要上传的项目) 三、按图点击后正常文件名会变绿…

python中关于函数的两种链式调用

函数之间的嵌套调用之函数的返回值就是另一个函数的参数 用一个函数的返回值作为另一个函数的参数。 如上图所示,将is0dd(10)的结果交给print函数来执行。 如上图所示,也是一个链式调用的案例,先将add(x&a…

gitlab之cicd的gitlab-runner cicd实践-rpm离线安装

目录 概述资源官方资源离线资源 操作环境验证gitlab-runner安装注意事项重启向gitlab注册CICD流程测试 概述 gitlab此文使用rpm离线安装的方式,使用 gitlab-runner dockerfile构建运行环境: 如有兴趣可以参考这篇文章   gitlab选择 docker-compose 执行…

关于JavaScript技术的基础内容汇总

目录 JavaScript 基础知识1. JavaScript 基本语法2. 变量和常量3. 数据类型4. 运算符5. 控制结构6. 函数7. 对象8. 数组9. 事件处理10. DOM 操作 JavaScript 基础知识 学习 JavaScript(简称 JS)是前端开发的重要组成部分,它是一种动态的、弱…

GIGE 协议摘录 —— GVCP 协议(二)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现(一) GIGE 协议摘录 —— GVCP 协议(二) GIGE 协议摘录 —— GVSP 协议(三) GIGE 协议摘录 —— 引导寄存器(四) GIGE 协议…

新品!和芯星通全系统全频高精度板卡UB9A0首发

6月6日,和芯星通发布了UB9A0全系统全频高精度GNSS板卡,主要应用于CORS站、便携基站、GNSS全球监测跟踪站等。延续了上一代产品高质量原始观测量的特点,UB9A0在性能和稳定性方面均表现出众。 UB9A0基于射频基带及高精度算法一体化的GNSS SoC芯…

新能源汽车内卷真相

导语:2025年,我国新能源汽车总产能预计可达3661万辆,如此产能如何消化? 文 | 胡安 “这样卷下去不是办法,企业目的是什么?是盈利,为国家作贡献,为社会作贡献。我们应该有大格局&…

问题:1、彩色餐巾可以渲染就餐气氛,下列说法错误的是 #知识分享#其他

问题:1、彩色餐巾可以渲染就餐气氛,下列说法错误的是 A.如艳红、大红餐巾给人以庄重热烈的感觉; B.橘黄、鹅黄色餐巾给人以高贵典雅的感觉; C.湖蓝色在夏天能给人以凉爽、舒适之感&#xff1…

大数据之HDFS磁盘扩容(linux磁盘扩容)

之所以扩容,是因为当前大数据平台已经接入了不同来源的数据,当执行mapreduce任务时,会发生磁盘爆满,导致hdfs爆红 具体扩容方案如下: 1、查看云磁盘分区情况 fdisk -l . 可以从图看出: /dev/vda 数据盘磁盘容量为21.5GB,包含/dev/vda1分区 /dev/vdb 数…

【大模型】Ollama+open-webui/Anything LLM部署本地大模型构建RAG个人知识库教程(Mac)

目录 一、Ollama是什么? 二、如何在Mac上安装Ollama 1. 准备工作 2. 下载并安装Ollama 3. 运行Ollama 4. 安装和配置大型语言模型 5. 使用Ollama 三、安装open-webui 1. 准备工作 2. Open WebUI ⭐的主要特点 3. Docker安装OpenWebUI,拉去太慢…

大学信息资源管理试题及答案,分享几个实用搜题和学习工具 #职场发展#微信

人工智能技术的发展正逐渐改变着我们的生活,学习如何运用这些技术将成为大学生的必备素养。 1.彩虹搜题 这是个微信公众号 算法持续优化,提升搜题效果。每一次搜索都更精准,答案更有价值。 下方附上一些测试的试题及答案 1、在SpringMVC配…