非顺序扫描

参考已有的扫描器,会发现几乎所有的扫描器都无一例外的使用增序扫描,即对所扫描的端口自小到大依次扫描,这一效果可以被对方的防火墙或IDS(入侵检测系统)作为判断正被扫描的特征。虽然通过多线程会使这一特征发生少量的变化,但从整体效果来看,仍然显示增序扫描。

改变增序扫描 一般有如下几种非顺序扫描算法

1、逆序扫描算法

顾名思义,逆序扫描就是采用从大到小的逆序扫描方式

2、随机重排扫描算法

随机重排扫描即重新排序要扫描的端口,在新的排序中,为了避免漏掉或重复使用某一端口,可以采用互换位置的方式进行。这个过程可以用一个数组和随机产生函数rand来实现。

3、线程前加延时扫描算法

为了提高扫描速度,很多扫描算法都采用多线程扫描。在windows中,同级别的扫描线程通过抢占方式获得CPU的优先使用权,各个线程理论上没有先后之例,但考虑到创建时总要有一定顺序,因此即使在运行中偶尔相邻的两个线程顺序会做出调整,整体上各线程之间也有先后顺序。
一个简单的算法就是在每一个线程中,扫描函数开始之前挂起一个随机的时间,这样会在不影响各线程创建时间的前提下,调整各线程中扫描的顺序。具体的方法就是在线程的开始加上一句
sleep(rand()%5000) //假设每个线程挂起的时间是5秒内的一个随机数

高速扫描

随着网络的迅速发展,一个部门内部的网络系统规模迅速壮大,有的达到成百上千个节点。对如此规模的目标进行扫描,要求扫描工具的速度非常快,于是出现了各种各样的高速扫描技术。
常见的有多线程并行扫描技术、基于KB(Knowwlede Base知识库)技术、将扫描和判断分离的技术

1、多线程不多赘述

2、KB技术

把扫描过的主机信息存储起来,当下次扫描的时候,首先以上次扫描结果作为参考,先对用户最关心的方面进行重新扫描,然后对其余部分进行扫描,这样既能提高扫描速度,又能降低占用的带宽。
如某次扫描中,用户只关心原有开的端口是否仍处于开的状态,则只需要扫描上次记录中开的端口即可。

分布式扫描

多台主机同时对目标主机进行扫描,在实施扫描的时候,由主控主机向各参与主机发送要扫描的IP地址和端口范围,然后所有主机同时向被测主机进行扫描

服务扫描

直接对服务进行扫描,通过服务的存在与否,判断端口开放情况

指纹识别算法

所谓指纹识别技术,就是与目标主机建立连接,并发送某种请求,由不同操作系统或相同操作系统不同版本所返回的数据格式或格式不同,判断目标主机的操作系统类型及版本

漏洞扫描

针对某一应用、软件的某版本,进行针对性扫描,攻击性比较强,时效性差

间接扫描

利用第三方IP 来隐藏扫描者的真实IP,由于扫描主机会对欺骗主机发送回应信息,所以需要扫描器的使用者必须具有监控欺骗主机的能力,以便获得原始扫描结果。

秘密扫描

正常情况下的扫描有时候会被对方的防火墙或IDS检测到,所以有些扫描器通常采用秘密方式进行扫描。最典型的例子就是,扫描程序通过采用非正常或非常规的方式,试探协议中在网络较差的情况下的容错技术,通过这些容错技术的不同反馈达到扫描的目的。这种方法由于没有完成正常的操作,所以对方不认为是一种扫描或攻击,而只是认为是网络发生的一种错误,不会被记录下来,相当于绕过了对方的安全机制

认证扫描

认证扫描则是利用认证协议的特征,通过判断获取到的监听端口的进程特征和行为,获得扫描端口的状态

代理扫描

当前的很多企业内部网络,考虑到各种因素影响,需要通过代理服务器访问内网,因而也有了代理扫描。代理扫描需要在原有所有的算法基础上再加上一个与代理服务器的通信,当前代理服务器的协议主要是SOCK5。在代理扫描的方式下,所有的扫描看上去是对代理服务器的扫描,因为所有数据都通过SOCK5封装后发给了代理服务器,而代理服务器会将这些数据转发给目标主机

手工扫描

通过操作系统自带的命令或程序文件进行探测

被动扫描

被动扫描不向目标主机发送刺探消息,而只是监听。只能通过截获网络上散落的数据包进行判断,主要有
1、被扫描主机通过广播方式向所有主机发送的数据包
2、有些主机直接通过组播方式进行通信,而要扫描的主机只要加入到该组播中,便可监听各主机之间通过组播方式的所有通信
3、即便是交换环境中,仍有很多数据包散步至各交换机端口,只是主机网口在发现不是给本机的数据包时直接丢掉。只要将网卡设为混杂模式,便可收到这些数据包