​​​​​​ 基于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、…

【leetcode--统计优美子数组】

解题思路 一、滑动窗口 不断右移 right 指针来扩大滑动窗口,使其包含 k 个奇数; 若当前滑动窗口包含了 k 个奇数,则如下「计算当前窗口的优美子数组个数」: 统计第 1 个奇数左边的偶数个数 leftEvenCnt。 这 leftEvenCnt 个偶数…

代码随想录算法训练营第30天|回溯

回溯part06 332. 重新安排行程 写了好长时间,最后超时了qaq /*** param {string[][]} tickets* return {string[]}*///ticket[1] [2,3]表示航线1是从地点2飞到地点3的 //所有机票必须用过一次 //优先选取字典排序更小的行程 var findItinerary function(ticket…

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

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

Java 实验8 集合类

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

Jira的原理及应用详解(三)

本系列文章简介: 在当今快速发展的软件开发和项目管理领域,有效的团队协作和精确的项目进度追踪是确保项目成功的关键。Jira作为一款广受欢迎的项目和问题追踪工具,以其强大的功能、灵活的定制性以及卓越的用户体验,赢得了全球众多企业的青睐。 Jira最初由Atlassian公司开发…

MTK默认开启Modem Log

基于Android12,user默认开启Modem Log。 修改分为三部分: 1.config修改 --- a/alps/device/mediatek/common/mtklog/mtklog-config-basic-user.propb/alps/device/mediatek/common/mtklog/mtklog-config-basic-user.prop-3,12 3,12 mtklog_path sys…

采购管理软件怎么选才不踩坑?收下这14 步清单

自动化采购任务和优化从采购到付款的周期可以为企业节省大量的资金和时间。但采用过时的采购方法(基于纸张的系统或 excel 电子表格),不可能获得这些好处。 采购管理软件之所以重要,是因为它为企业提供了有效跟踪、管理和分析支出…

DolphinScheduler调度系统

Apache DolphinScheduler 是一个开源的调度系统。它是一个分布式、大数据工作流调度系统,专门为数据工程师、数据科学家和数据分析师设计,提供了丰富的功能来管理和调度大数据处理任务。以下是关于 Apache DolphinScheduler 的一些关键点: 主…

数据库管理工具——DBeaver简介

在数据库管理的世界里,选择一个高效、稳定且易于使用的工具至关重要。今天,我将为大家介绍一款备受好评的数据库管理工具——DBeaver,并详细讲解其使用方法。 一、DBeaver简介 DBeaver是一个基于Java的开源数据库管理工具,支持几…

探索多头混合专家(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)是前端开发的重要组成部分,它是一种动态的、弱…