且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

更新时间:2021-10-01 06:46:58

点击查看第一章
点击查看第三章

第2章 网络扫描基础技术

  在第1章中介绍了网络扫描的目的和方式。接下来,用户就可以实施网络扫描了。本章将介绍一些网络扫描的基础技术,如ICMP扫描、TCP扫描、UDP扫描和IP扫描。

2.1 ICMP扫描

  ICMP(Internet Control Message Protocal,因特网控制报文协议)工作在OSI的网络层,向数据通信中的源主机报告错误。从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让用户能够检测网络的连续状况,也能够确保连续的准确性。通过实施ICMP Ping扫描,可以发现目标主机是否活动。本节将介绍ICMP的工作机制及不同的扫描方法。

2.1.1 ICMP工作机制

  ICMP是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递却起着重要的作用。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息,进而确定目标主机的状态。为了使读者对ICMP的响应消息有一个清晰的认识,这里以表格形式列出了ICMP的所有消息类型,如表2.1所示。

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术
带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

2.1.2 标准ICMP扫描

  标准ICMP扫描就是简单的通过向目标主机发送ICMP Echo Request数据包,来探测目标主机是否在线。如果目标主机回复用户ICMP Echo Reply包的话,则说明目标主机在线;否则说明不在线。其中,最常见的发送ICMP Echo Request包工具就是Ping。用户还可以使用一个类似Ping的工具fping等。下面将介绍实施标准ICMP扫描的方法。
  1.使用Ping命令
  Ping是Windows、UNIX和Linux系统下的一个命令。使用该命令可以检查网络是否连通,可以很好地帮助用户分析和判定网络故障。该命令是通过发送一个ICMP Echo Request数据包,并等待目标主机返回的响应,来检查网络是否通畅或者网络连接速度。该命令的语法格式如下: 

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

 

  【实例2-1】使用Ping命令实施标准ICMP扫描。执行命令如下:

root@daxueba:~# ping 192.168.33.152
  PING 192.168.33.152 (192.168.33.152) 56(84) bytes of data.
  64 bytes from 192.168.33.152: icmp_seq=1 ttl=64 time=0.516 ms
  64 bytes from 192.168.33.152: icmp_seq=2 ttl=64 time=0.344 ms
  64 bytes from 192.168.33.152: icmp_seq=3 ttl=64 time=0.535 ms
  64 bytes from 192.168.33.152: icmp_seq=4 ttl=64 time=0.365 ms
  64 bytes from 192.168.33.152: icmp_seq=5 ttl=64 time=0.287 ms
  ^C
  --- 192.168.33.152 ping statistics ---
  5 packets transmitted, 5 received, 0% packet loss, time 79ms
  rtt min/avg/max/mdev = 0.287/0.409/0.535/0.100 ms

  看到以上输出信息,则表示得到了目标主机的响应。由此可以说明,目标主机是活动的。如果目标主机没有在线的话,将显示如下信息:

root@daxueba:~# ping 192.168.33.128
  PING 192.168.33.128 (192.168.33.128) 56(84) bytes of data.
  From 192.168.33.154 icmp_seq=1 Destination Host Unreachable
  From 192.168.33.154 icmp_seq=2 Destination Host Unreachable
  From 192.168.33.154 icmp_seq=3 Destination Host Unreachable

  从输出的信息可以看到,返回的响应包为Destination Host Unreachable(目标主机不可达)。

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  2.使用Nmap工具
  Nmap是一个免费开放的网络扫描和嗅探工具包,也叫网络映射器(Network Mapper)。Nmap工具的“-PE”选项,可以用来实施ICMP扫描,该工具的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  以上语法中的-PE选项,表示将发送一个ICMP echo、timestamp和netmask请求,来探测目标主机是否在线。
  【实例2-2】使用Nmap实施ICMP扫描。执行命令如下:

root@daxueba:~# nmap -PE 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 10:58 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.00030s latency).                                #主机是活动的
  Not shown: 997 closed ports                                    #关闭的端口
  PORT   STATE SERVICE                                            #开放的端口
  21/tcp   open    ftp
  22/tcp   open    ssh
  80/tcp   open    http
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 0.31 seconds

  从输出的信息可以看到,目标主机192.168.33.152是活动的(up),而且还可以看到,目标主机开放了三个端口,997个端口是关闭的。其中,开放的端口分别是21、22和80。如果目标主机没有在线的话,则将显示如下信息:

 root@daxueba:~# nmap -PE 192.168.33.128
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 15:30 CST
  Note: Host seems down. If it is really up, but blocking our ping probes, 
  try -Pn
  Nmap done: 1 IP address (0 hosts up) scanned in 0.53 seconds

  从输出的信息可以看到,目标主机是关闭的(down)。
  3.使用Fping命令
  Fping是一个小型命令行工具,用于向网络主机发送ICMP回应请求,类似于Ping,但在Ping多个主机时性能要高得多。Fping与Ping命令不同的是,Fping可以在命令行上定义任意数量的主机,或者指定包含要Ping的IP地址或主机列表文件。其中,使用Fping命令实施扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

 【实例2-3】使用Fping实施ICMP扫描。执行命令如下:

 root@daxueba:~# fping 192.168.33.128 192.168.33.147 192.168.33.152
  192.168.33.147 is alive
  192.168.33.152 is alive
  ICMP Host Unreachable from 192.168.33.154 for ICMP Echo sent to 192.168.
  33.128
  ICMP Host Unreachable from 192.168.33.154 for ICMP Echo sent to 192.168.
  33.128
  ICMP Host Unreachable from 192.168.33.154 for ICMP Echo sent to 192.168.
  33.128
  ICMP Host Unreachable from 192.168.33.154 for ICMP Echo sent to 192.168.
  33.128
  192.168.33.128 is unreachable

  从以上输出的信息可以看到,测试了3台主机。其中,主机192.168.33.147和192.168.33.152是活动的,主机192.168.33.128不可达。

2.1.3 时间戳查询扫描

  对于一些服务器来说,通常会配置防火墙,用来阻止ICMP Echo请求。但是由于一些配置不当,仍然可能会回复ICMP时间戳请求。因而可以通过使用ICMP时间戳查询扫描,来判断目标主机是否在线。下面将介绍使用Nmap实施ICMP时间戳查询扫描的方法。
  使用Nmap实施ICMP时间戳查询扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-PP表示进行一个ICMP时间戳Ping扫描。
  【实例2-4】对目标主机192.168.33.152实施时间戳查询扫描。执行命令如下:

 root@daxueba:~# nmap -PP 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 10:58 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.000095s latency).
  Not shown: 997 closed ports
  PORT   STATE SERVICE
  21/tcp   open    ftp
  22/tcp   open    ssh
  80/tcp   open    http
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds

  从输出的信息中可以看到,目标主机是活动的。

2.1.4 地址掩码查询扫描

  地址掩码查询扫描和时间戳查询扫描类似。这种非常规的ICMP查询,试图用备选的ICMP登记Ping指定的主机,这种类型的Ping可绕过配置有***标准回声请求策略的防火墙。使用Nmap实施地址掩码查询扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-PM表示进行一个ICMP地址掩码Ping扫描。
  【实例2-5】使用Nmap对目标主机实施地址掩码查询扫描。执行命令如下:

root@daxueba:~# nmap -PM 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 10:59 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.00011s latency).
  Not shown: 997 closed ports
  PORT   STATE SERVICE
  21/tcp   open    ftp
  22/tcp   open    ssh
  80/tcp   open    http
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds

  从以上输出信息中可以看到,目标主机是活动的。

2.2 TCP扫描

  TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。根据TCP协议的工作流程,可以向目标主机发送不同类型的包,然后根据目标主机的响应情况,来判断目标主机是否在线。本节将介绍TCP的工作机制及扫描方法。

2.2.1 TCP工作机制

  TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的SYN执行ACK确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。TCP建立连接的工作流程如图2.1所示。

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  以上建立连接的详细工作流程如下:
  (1)客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
  (2)服务器端收到SYN报文后,将回应一个SYN(SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
  (3)客户端收到服务器端的SYN报文后,将回应一个ACK(ACK=y+1)报文,进入Established状态。至此,TCP的三次握手就完成了,TCP客户端和服务器端成功地建立了连接。接下来就可以开始传输数据了。

2.2.2 TCP SYN扫描

  TCP SYN扫描也叫做隐蔽扫描或半打开的扫描。在这种技术中,扫描主机向目标主机指定端口发送SYN数据包。如果源主机收到RST数据包,则说明端口是关闭的;如果源主机收到SYN+ACK数据包,则说明目标端口处于监听状态。由于扫描主机已经获取端口的状态信息,并不需要建立连接,所以传送一个RST数据包给目标主机,从而停止建立连接。在SYN扫描过程中,客户端和服务器端没有形成三次握手,所以没有建立一个正常的TCP连接,因此扫描操作不会被防火墙和日志所记录。这样就不会在目标主机上留下任何的痕迹,但是这种扫描需要Root权限。下面将介绍使用Nmap工具实施TCP SYN扫描的方法。
  1.TCP SYN Ping扫描
  Ping扫描主要就是用于探测网络中活动主机的。Nmap默认Ping扫描是使用TCP ACK和ICMP Echo请求来判断目标主机是否响应。如果目标主机上有防火墙阻止这些请求时,将会漏掉这些主机。此时,用户可以使用TCP SYN Ping扫描来处理这种情况。用于TCP SYN Ping扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-PS表示实施TCP SYN Ping扫描。
  【实例2-6】实施TCP SYN Ping扫描。执行命令如下:

 root@daxueba:~# nmap -PS 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 10:59 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.00015s latency).
  Not shown: 997 closed ports
  PORT   STATE SERVICE
  21/tcp open  ftp
  22/tcp open  ssh
  80/tcp open  http
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds

  从以上输出信息中可以看到,目标主机是开放的。
  2.TCP SYN扫描
  实施TCP SYN扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-sS表示实施TCP SYN扫描。这里的-sS选项,实际上是-s和-S两个选项的组合。可以分别来理解这两个选项:-s表示告诉Nmap运行哪种类型的扫描;-S表示执行TCP SYN类型扫描。
  【实例2-7】实施TCP SYN扫描。执行命令如下:

root@daxueba:~# nmap -sS 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 10:59 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.00010s latency).
  Not shown: 997 closed ports
  PORT   STATE  SERVICE
  21/tcp    open   ftp
  22/tcp    open   ssh
  80/tcp    open   http
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 0.24 seconds

2.2.3 TCP ACK扫描

  TCP ACK扫描和TCP SYN扫描类似,其扫描方法是源主机向目标主机的一个端口发送一个只有ACK标志的TCP数据包,不论目标主机的端口是否开启,都会返回相应的RST数据包,然后通过RST包中的TTL,来判断端口是否开启。其中,当TTL值小于64时,表示端口开启;当TTL值大于64时,则表示端口关闭。下面将介绍实施TCP ACK扫描的方法。
  1.TCP ACK Ping扫描
  TCP ACK Ping扫描和TCP SYN Ping扫描类似,都是根据目标主机的响应来判断主机是否在线。使用这种扫描方式,可以探测阻止SYN包或ICMP Echo请求的主机。但是这种扫描方式会被防火墙阻止。用于实施TCP ACK Ping扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-PA表示实施TCP ACK Ping扫描。
  【实例2-8】实施TCP ACK Ping扫描。执行命令如下:

 root@daxueba:~# nmap -PA 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 10:59 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.00054s latency).
  Not shown: 997 closed ports
  PORT   STATE SERVICE
  21/tcp   open   ftp
  22/tcp   open   ssh
  80/tcp   open   http
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds

  2.TCP ACK扫描
  实施TCP ACK扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-sA表示实施TCP ACK扫描。
  【实例2-9】实施TCP ACK扫描。执行命令如下:

root@daxueba:~# nmap -sA 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 10:55 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.00010s latency).
  All 1000 scanned ports on 192.168.33.152 (192.168.33.152) are unfiltered
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 0.24 seconds

2.2.4 TCP全连接扫描

  TCP全连接扫描是端口扫描中最基础和最稳定的,因为Nmap试图在其命令指定的每个端口上完成三次握手。这种扫描完整地完成了三次握手过程,之后又通过友好的方式断开连接,因此不容易形成对目标的泛洪攻击,以至崩溃。这种扫描方法的特点是扫描速度慢、准确性高,对操作者没有权限上的要求,但是容易被防火墙和IDS(防入侵系统)发现。下面将介绍使用Nmap实施TCP全连接扫描的方法。
  使用Nmap实施TCP全连接扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

其中,-sT表示实施TCP全连接扫描。
  【实例2-10】使用Nmap实施TCP全连接扫描,执行命令如下:

root@daxueba:~# nmap -sT 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 10:57 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.00089s latency).
  Not shown: 997 closed ports
  PORT   STATE SERVICE
  21/tcp   open   ftp
  22/tcp   open   ssh
  80/tcp   open   http
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds

 

2.2.5 TCP窗口扫描

  窗口扫描和ACK扫描完全一样。它通过检查返回的RST报文的TCP窗口域,来判断目标端口是开放还是关闭。在某些系统上,开放端口用正数表示窗口大小(甚至对于RST报文),而关闭端口的窗口大小为0。因此,当收到RST包时,窗口扫描并不总是把端口标记为unfiltered,而是根据TCP窗口值是正数还是0,分别把端口标记为open或者closed。下面介绍TCP窗口扫描的方法。
  使用Nmap实施TCP窗口扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-sW选项表示实施TCP窗口扫描。
  【实例2-11】对目标主机实施TCP窗口扫描。执行命令如下:

root@daxueba:~# nmap -sW 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 11:00 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.000087s latency).
  All 1000 scanned ports on 192.168.33.152 (192.168.33.152) are closed
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds

2.2.6 端口状态

  前面介绍了几种常见的TCP扫描端口方式。使用Nmap工具还可以进行一些其他扫描,如TCP FIN扫描和TCP Null扫描等。下面分别介绍这些端口扫描方式。
  使用Nmap进行端口扫描时,可以识别6个端口状态,分别是open(开放的)、closed(关闭的)、filtered(被过滤的)、unfiltered(未被过滤的)、open|filtered(开放或者被过滤的)和closed|filtered(关闭或者被过滤的)。这里介绍下Nmap识别的6个端口状态的具体含义。

  • open(开放的):应用程序正在该端口接收TCP连接或者UDP报文。安全意识强的人们应该知道每个开放的端口都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口,而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。非安全扫描可能对开放的端口也感兴趣,因为它们显示了网络上哪些服务可供使用。
  • closed(关闭的):关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应),但没有应用程序在其上监听。它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行,也对部分操作系统的探测有所帮助。因为关闭的端口是可访问的,也许一会儿之后可能有一些关闭的端口又开放了。系统管理员可能会用防火墙***这样的端口,这样它们就会显示为被过滤的状态。
  • filtered(被过滤的):由于包过滤阻止探测报文到达端口,Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备、路由器规则或者主机上的软件防火墙。有时候它们响应ICMP错误消息,如类型3代码13(无法到达目标:通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧,不做任何响应。Nmap会重试若干次,检测探测包是否是由于网络阻塞而被丢弃的。这会导致扫描速度明显变慢。
  • unfiltered(未被过滤的):未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。用户只有通过映射防火墙规则集的ACK扫描,才会把端口分类到这种状态。使用其他类型的扫描(如窗口扫描、SYN扫描或者FIN扫描),来扫描未被过滤的端口可以帮助确定端口是否开放。
  • open|filtered(开放或者被过滤的):当无法确定端口是开放还是被过滤的时候,Nmap会把该端口划分成这种状态。开放的端口不响应就是这种情况,没有响应也可能意味着报文过滤器丢弃了探测报文和探测报文引起的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的。UDP、IP协议、FIN、Null和Xmas扫描可能把端口归入此类。
  • closed|filtered(关闭或者被过滤的):该状态用于Nmap不能确定端口是关闭的还是被过滤的,它只可能出现在IPID Idle扫描中。

  1.TCP FIN扫描
  有些时候,使用TCP SYN扫描也不是***的扫描模式。因为如果目标主机有防火墙的时候,会阻止SYN数据包,这时候可以考虑使用TCP FIN扫描。因为TCP FIN标志的数据包,并不需要完成TCP的握手。TCP FIN扫描就是向目标端口发送一个FIN包。如果收到目标响应的RST包,则说明该端口是关闭的;如果没有收到RST包,则说明端口可能是开放的或被屏蔽的。使用Nmap实施TCP FIN扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-sF表示发送一个设置了FIN标志的数据包。
  【实例2-12】使用Nmap实施TCP FIN扫描。执行命令如下:

root@daxueba:~# nmap -sF 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 11:01 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.00063s latency).
  Not shown: 997 closed ports
  PORT   STATE         SERVICE
  21/tcp   open|filtered       ftp
  22/tcp   open|filtered       ssh
  80/tcp   open|filtered       http
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 1.42 seconds

  2.TCP Xmas树扫描
  TCP Xmas树扫描也称为圣诞树扫描,它发送带有URG、PSH和FIN标志的TCP数据包。如果目标主机响应一个RST标志数据包,则说明目标主机的端口是关闭的。使用Nmap实施TCP Xmas树扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-sX表示实施TCP Xmas树扫描。
  【实例2-13】实施TCP Xmas树扫描。执行命令如下:

root@daxueba:~# nmap -sX 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 11:01 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.000078s latency).
  Not shown: 997 closed ports
  PORT   STATE         SERVICE
  21/tcp   open|filtered      ftp
  22/tcp   open|filtered      ssh
  80/tcp   open|filtered      http
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 1.40 seconds

  3.TCP Null扫描
  TCP Null(空)扫描和TCP Xmas树扫描一样,也是通过发送非常规的TCP通信数据包对目标计算机进行探测。在很多情况下,Null扫描和Xmas树扫描正好相反,因为Null扫描使用没有任何标记(全空)的数据包。根据RFC793规定,如果目标主机的相应端口是关闭的话,则应该响应一个RST数据包;如果目标主机的相应端口是开启的话,则不会响应任何信息。使用Nmap实施TCP Null扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-sN表示实施TCP Null扫描。
  【实例2-14】实施TCP Null扫描。执行命令如下:

root@daxueba:~# nmap -sN 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 11:00 CST
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.00067s latency).
  Not shown: 997 closed ports
  PORT   STATE         SERVICE
  21/tcp   open|filtered       ftp
  22/tcp   open|filtered       ssh
  80/tcp   open|filtered       http
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 1.40 seconds

2.3 UDP扫描

  UDP扫描通过向目标主机发送UDP包,根据目标主机的响应情况来判断目标是否在线。由于UDP协议是非面向连接的,对UDP端口的探测也就不像TCP端口的探测那样依赖于连接建立过程,这使得UDP端口扫描的可靠性并不高。所以,虽然UDP协议较之TCP协议更简单,但是对UDP端口的扫描却是相当困难的。本节将介绍UDP扫描的工作机制及扫描方法。

2.3.1 UDP工作机制

  UDP(User Datagram Protocol,用户数据报协议)是与TCP响应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过来。UDP适用于一次只传少量数据,对可靠性要求不高的应用环境。其中,Ping命令的原理就是向对方主机发送UDP数据包,然后对方主机确认是否收到数据包。如果数据包是否到达的消息及反馈回来,那么网络就是通的。

2.3.2 实施UDP扫描

  UDP扫描是通过发送UDP数据包到目标主机并等待响应,来判断目标端口是否开放。如果目标返回ICMP不可达的错误(类型3,代码3),则说明端口是关闭的;如果得到正确的或适当的响应,则说明端口是开放的。下面介绍使用Nmap实施UDP扫描的方法。
  1.UDP Ping扫描
  UDP Ping扫描就是通过向目标主机发送一个空的UDP包到指定端口,然后根据目标主机的响应情况来判断目标是否在线。尽管一些服务器会配置防火墙阻止连接,但有些情况下用户可能仅配置了过滤TCP连接,而忘记配置UDP过滤规则。所以,使用UDP Ping扫描也是发现主机的一种方法。其语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  以上语法中的选项及含义如下:

  • -PU:扫描只会对目标进行UDP Ping扫描。这种类型的扫描会发送UDP包来获得一个响应。
  • portlist:指定扫描的端口,默认是40125。
      【实例2-15】对目标主机的53号端口实施UDP Ping扫描。执行命令如下:
root@daxueba:~# nmap -PU53 61.135.169.121
  Starting Nmap 7.70 ( https://nmap.org ) at 2019-01-02 14:45 CST
  Note: Host seems down. If it is really up, but blocking our ping probes, 
  try -Pn
  Nmap done: 1 IP address (0 hosts up) scanned in 2.12 seconds

  从输出的信息中可以看到,目标主机上的53号端口没有开放,进而推断出目标主机不在线。

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  2.UDP扫描
  实施UDP扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-sU表示这种扫描技术是用来寻址目标主机打开的UDP端口。它不需要发送任何的SYN包,因为这种技术是针对UDP端口的。UDP扫描发送UDP数据包到目标主机,并等待响应。如果返回ICMP不可达的错误消息,说明端口是关闭的;如果得到正确的或适当的回应,则说明端口是开放的。
  【实例2-16】实施UDP扫描。执行命令如下:

root@daxueba:~# nmap -sU 192.168.33.147
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 11:15 CST
  Nmap scan report for 192.168.33.147 (192.168.33.147)
  Host is up (0.00046s latency).
  Not shown: 990 closed ports
  PORT        STATE               SERVICE
  9/udp       open|filtered     discard
  53/udp      open                domain
  68/udp      open|filtered     dhcpc
  69/udp      open|filtered     tftp
  111/udp     open                rpcbind
  137/udp     open                netbios-ns
  138/udp     open|filtered     netbios-dgm
  2049/udp    open                nfs
  3401/udp    open|filtered     squid-snmp
  16420/udp   open|filtered     unknown
  MAC Address: 00:0C:29:3E:84:91 (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 1107.22 seconds

  从输出的信息中可以看到目标主机上开放的UDP端口及对应服务。例如,开放的UDP端口有53、111和137等。

2.4 IP扫描

  IP(Internet Protocol Address,网际协议地址)也称为IP地址,是分配给用户上网使用的网际协议设备的地址标签。Nmap工具提供了一个-sO选项,可以用来实施IP扫描。通过实施IP扫描,可以探测到目标主机中TCP/IP协议簇中有哪些协议,类型号分别是多少。其中,用于实施IP扫描的语法格式如下:

带你读《从实践中学习Kali Linux网络扫描》之二:网络扫描基础技术

  其中,-sO表示使用IP协议扫描确定目标主机支持的协议类型。
  【实例2-17】使用Nmap实施IP扫描。执行命令如下:

root@daxueba:~# nmap -sO 192.168.33.152
  Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-20 11:03 CST
  Warning: 192.168.33.152 giving up on port because retransmission cap hit (10).
  Nmap scan report for 192.168.33.152 (192.168.33.152)
  Host is up (0.00052s latency).                        #目标主机是开放的
  Not shown: 244 closed protocols                        #关闭的协议号
  PROTOCOL STATE                SERVICE                    #开放的协议号
  1          open                 icmp
  2          open|filtered      igmp
  6          open                 tcp
  17         open                 udp
  64         open|filtered      sat-expak
  95         open|filtered      micp
  101        open|filtered      ifmp
  103        open|filtered      pim
  131        open|filtered      pipe
  136        open|filtered      udplite
  142        open|filtered      rohc
  230        open|filtered      unknown
  MAC Address: 00:0C:29:FD:58:4B (VMware)
  Nmap done: 1 IP address (1 host up) scanned in 274.75 seconds

  从以上输出信息中可以看到目标主机上支持所有协议。例如,支持的协议有ICMP、IGMP、TCP和UDP等,对应的协议号分别为1、2、6和17。