最近由于工作的需要,在网上找了些有关网络扫描的资料,整理完后发在论坛上,同时写了些代码,把代码封装成了库,如果有朋友需要源代码,可以给我邮件.

欢迎有不同见解和好建议的朋友彼此交流,有不正确的地方也欢迎大家多多指正^_^

网络安全扫描技术包括有PING扫射、操作系统探测、如何探测访问控制规则、端口扫描以及漏洞扫描。
1.PING扫射(Ping sweeP):PING扫射即所谓的主机扫描,其主要目的是帮助我们识别系统是否处于活动状态。
2.端口扫描(Port scan):端口扫描是通过与目标系统的端口连接,并查看该系统处于监听或运行状态的服务。
3.操作系统探测(Operating system identification):对目标主机运行的操作系统进行识别。
4.如何探测访问控制规则(firewalking):如何探测访问控制规则用于获取被防火墙保护的远端网络的资料。
5.漏洞扫描(vulnerability scan):漏洞扫描通常是在端口扫描的基础上,对得到的信息进行相关处理,进而检测出目标系统存在的安全漏洞。

主机扫描技术和端口扫描技术是网络扫描技术中常见的两种技术,并且广泛运用于当前较成熟的网络安全产品中,本文将对这两种技术及相关内容做详细的阐述。

主机扫描

PING扫射
PING是最常用的,也是最简单最基本的探测手段,用来判断目标是否活动。Ping是向目标发送一个要求回显(Type = 8)的ICMP数据报,当主机得到请求后,再返回一个回显(Type = 0)数据报。PING扫射就是对一个网段进行大范围的Ping,由此来确定这个网段的网络运作情况。由于目前基本的个人防火墙都会对Ping做限制,如果想透过这些限制,我们需要使用一些高级的ICMP扫描技术尽可能地绕过限制来达到我们需要的目的。

高级的ICMP扫描
高级的ICMP扫描技术主要是利用ICMP协议最基本的用途:报错。根据网络协议,如果按照协议出现了错误,那么接收端将产生一个ICMP的错误报文。
比如我们可以利用以下网络协议的一些特性来判断主机是否在线:
1.向目标主机发送一个只有IP头的IP数据包,目标将返回Destination Unreachable的ICMP错误报文。
2.向目标主机发送一个坏IP数据报,比如,不正确的IP头长度,目标主机将返回Parameter Problem的ICMP错误报文。
3.当数据包分片但是却没有给接收端足够的分片,接收端分片组装超时会发送分片组装超时的ICMP数据报。

端口扫描
端口扫描向目标主机的服务端口发送探测数据包,并记录目标主机的响应。通过分析响应来判断服务端口是打开还是关闭,就可以得知端口提供的服务或信息。目前端口扫描技术主要有全TCP连接、TCP SYN扫描以及秘密扫描技术等。


在此之前我们首先介绍下TCP协议连接的三次握手过程:
首先客户端(请求方)在连接请求中,发送SYN=1,ACK=0的TCP数据包给服务器端(接收请求端),表示要求同服务器端建立一个连接;然后如果服务器端响应这个连接,就返回一个SYN=1,ACK=1的数据报给客户端,表示服务器端同意这个连接,并要求客户端确认;最后客户端就再发送SYN=0,ACK=1的数据包给服务器端,表示确认建立连接。
我们就是利用这些标志位和TCP协议连接的三次握手特性来进行端口扫描。


全TCP连接
全TCP连接这是最基本的TCP扫描技术。操作系统提供的connect()系统调用,用来与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,那么connect()就能成功,否则返回-1,表示端口不可访问。该技术最大的优点是不需要任何权限,系统中的任何用户都有权利使用这个调用。缺点是这种扫描方法很容易检测出来,也是最基本最先被防火墙所拒绝。

TCP SYN扫描
在高级的TCP扫描技术中主要利用TCP连接的三次握手特性和TCP数据头中的标志位来进行,此扫描技术利用了TCP协议连接的第一步,并且没有建立一个完整的TCP连接。
TCP SYN扫描也叫“半开式扫描”,实现办法是向远端主机某端口发送一个只有SYN标志位的TCP数据报,如果主机反馈一个SYN | ACK数据包,那么这个主机正在监听该端口,如果反馈的是RST数据包,说明主机没有监听该端口。

秘密扫描
由于这种技术不包含标准的TCP三次握手协议的任何部分,所以无法被记录下来,从而不容易被。该扫描的另一个特点是当对方没有任何响应时认为目标端口是开放的,而如果返回数据则认为目标端口是关闭的。

SYN | ACK
通过发送带SYN | ACK标志的数据包,一个关闭的端口会返回RST标志,而一个开放的端口则会忽略该包,不返回任何信息。缺点是因为网络原因在传输过程中返回包丢失了,这时收不到RST数据包,就会认定目标端口是开放的,这就造成了结果的误判。

ACK 扫描
发送一个只有ACK标志的TCP数据报给主机,如果主机反馈一个TCP RST数据报来,那么这个主机是存在的。

FIN扫描
对某端口发送一个TCP FIN数据报给远端主机。如果主机没有任何反馈,那么这个主机是存在的,而且正在监听这个端口;主机反馈一个TCP RST回来,那么说明该主机是存在的,但是没有监听这个端口。

NULL扫描
即发送一个没有任何标志位的TCP包,根据RFC793,如果目标主机的相应端口是关闭的话,应该发送回一个RST数据包。

Xmas扫描
向目标主机发送一个FIN,URG和PUSH分组,根据RFC793,如果目标主机的相应端口是关闭的,那么应该返回一个RST标志。

UDP扫描技术
这种方法是以发送零字节的UDP信息包到目标机器的各个端口。如果我们收到一个ICMP端口无法到达的回应,那么说明该端口是关闭的;反之,如果没有收到响应消息,则可以肯定该端口是打开的。由于UDP协议是面向无连接的协议,这种扫描技术的精确性高度依赖于网络性能和系统资源。