2.3 端口扫描
网络中的每一台计算机如同一座城堡,在这些城堡中,有的对外完全开放,有的却是紧锁城门。入侵者们是如何找到,并打开它们的城门的呢?这些城门究竟通向城堡的何处呢?
在网络技术中,把这些城堡的“城门”称之为计算机的“端口”。端口扫描是入侵者搜集信息的几种常用手法之一,也正是这一过程最容易使入侵者暴露自己的身份和意图。一般来说,扫描端口有如下目的:
è 判断目标主机上开放了哪些服务;
è 判断目标主机的操作系统。
如果入侵者掌握了目标主机开放了哪些服务,运行何种操作系统,他们就能够使用相应的手段实现入侵。
本节将会详尽地分析端口扫描所涉及的问题,并以实用为主要目的来介绍一些基本概念,以便更加清楚地了解入侵者如何扫描目标主机的端口。
2.3.1 网络基础知识
本书尽量避免使用较大篇幅来介绍理论知识,但为了让大家更透彻地了解入侵者的手段,这里给大家介绍一些网络的基础知识。只对应用感兴趣的读者可以略过这部分。
1.端口的基本概念
“端口”在计算机网络领域中是个非常重要的概念。它是专门为计算机通信而设计的,它不是硬件,不同于计算机中的“插槽”,可以说是个“软插槽”。如果有需要的话,一台计算机中可以有上万个端口。
端口是由计算机的通信协议TCP/IP协议定义的。其中规定,用IP地址和端口作为套接字,它代表TCP连接的一个连接端,一般称为Socket。具体来说,就是用[IP:端口]来定位一台主机中的进程。可以做这样的比喻,端口相当于两台计算机进程间的大门,可以随便定义,其目的只是为了让两台计算机能够找到对方的进程。计算机就像一座大楼,这个大楼有好多入口(端口),进到不同的入口中就可以找到不同的公司(进程)。如果要和远程主机A的程序通信,那么只要把数据发向[A:端口]就可以实现通信了。
可见,端口与进程是一一对应的,如果某个进程正在等待连接,称之为该进程正在监听,那么就会出现与它相对应的端口。由此可见,入侵者通过扫描端口,便可以判断出目标计算机有哪些通信进程正在等待连接。
2.端口的分类
端口是一个16 bit的地址,用端口号进行标识不同作用的端口,参见表2-2和表2-3。端口一般分为两类。
① 熟知端口号(公认端口号):由因特网指派名字和号码公司ICANN负责分配给一些常用的应用层程序固定使用的熟知端口,其数值一般为0~1023。
② 一般端口号:用来随时分配给请求通信的客户进程。
表2-2 常见TCP公认端口号
|
服务名称 |
端 口 号 |
说 明 |
|
FTP |
21 |
文件传输服务 |
续表
|
服务名称 |
端 口 号 |
说 明 |
|
Telnet |
23 |
远程登录服务 |
|
HTTP |
80 |
网页浏览服务 |
|
POP3 |
110 |
邮件服务 |
|
SMTP |
25 |
简单邮件传输服务 |
|
Socks |
1080 |
代理服务 |
表2-3 常见UCP公认端口号
|
服务名称 |
端 口 号 |
说 明 |
|
RPC |
111 |
远程调用 |
|
SNMP |
161 |
简单网络管理 |
|
TFTP |
69 |
简单文件传输 |
3.TCP/IP协议基础知识
首先简要介绍Internet的基本通信协议TCP/IP协议。TCP/IP,即传输控制协议/网际互连协议,它把整个计算机通信网划分为应用层、运输层、网际层、网络接口层。按照这种层次划分的通信模式如图2-44所示。
|
应用层 (应用层协议如HTTP、FTP、SMTP、Telnet等) |
|
应用层 (应用层协议如HTTP、FTP、SMTP、Telnet等) | ||
|
运输层TCP、UDP |
|
运输层TCP、UDP | ||
|
网际层IP |
32 Bit |
网际层IP | ||
|
网络接口层 |
|
网络接口层 |
图2-44
Internet的网络通信大多是建立在这个协议之上的,各个主机遵循着TCP/IP协议封装数据包进行通信。
由图2-44可见,TCP/IP在运输层包括两个协议TCP和UDP,并且TCP和UDP都使用相同的网际层IP,TCP与UDP协议各自特点如下。
① 用户数据报协议UDP(User Datagram Protocol):UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP数据报后,不需要给出任何确认。广泛应用于只需一次的客户/服务器模式的请求-应答查询,或者要求提供高效率数据传输的场合。
② 传输控制协议TCP(Transmission Control Protocol):TCP提供可靠的、面向连接的运输服务,用于高可靠性数据的传输。TCP具有完善的错误检测与恢复、顺序控制和流量控制等功能。
TCP和UDP协议说明如下。
注重可靠性的场合一般使用TCP协议,例如FTP、Telnet,而在那些更注重实时性、传输率、吞吐量的场合一般使用UDP,如QQ。TCP报文分为首部和数据两部分。TCP报文段首部的前20个字节是固定的,后面有4n字节(n为整数)是可有可无的选项。因此TCP首部的最小长度是20字节。
TCP报文结构如图2-45所示。
SYN:该标志位用来建立连接,让连接双方同步序列号。如果SYN=1而ACK=0,则表示该数据包为连接请求,如果SYN=1而ACK=1则表示接受连接。
FIN:表示发送端已经没有数据要求传输了,希望释放连接。
RST:用来复位一个连接。RST标志置位的数据包称为复位包。一般情况下,如果TCP收到的一个分段明显不是属于该主机上的任何一个连接,则向远端发送一个复位包。
URG:为紧急数据标志。如果它为1,表示本数据包中包含紧急数据。此时紧急数据指针有效。
ACK:为确认标志位。如果为1,表示包中的确认号时有效的。否则,包中的确认号无效。
PSH:如果置位,接收端应尽快把数据传送给应用层。
![]()
|
源端口 |
目的端口 | |||||||
|
序号 | ||||||||
|
确认序号 | ||||||||
|
数据偏移 |
保留 |
URG |
ACK |
PSH |
RST |
SYN |
FIN |
窗口 |
|
检验和 |
紧急指针 | |||||||
|
选项和填充 | ||||||||
|
数据 | ||||||||
图2-45
3.三次握手
当使用TCP协议的时候,需要双方计算机建立TCP连接,把这个建立过程形象地称为“三次握手”。
三次握手的过程如图2-46所示。

图2-46
第一次:主机A的TCP向主机B的TCP发出连接请求报文段,其首部中的同步比特SYN=1,ACK=0,同时选择一个序号x,表明在后面传送数据时的第一个数据字节的序号是x。
第二次:主机B的TCP收到连接请求报文段后,如同意,则发回确认。在确认报文段中应将SYN=1,ACK=1,确认序号应为x+1,同时也为自己选择一个序号y。
第三次:主机A的TCP收到此报文段后,还要向B给出确认ACK=1,其确认序号为y+1。
三次握手后,主机A和主机B就可以相互进行数据传输。
三次握手的功能:保证双方都相互知道对方已准备好进行数据传输,双方确认一个数据传输的初始序列号。例如,发送方的初始序列号为x,接收方初始序列号为y,均被对方确认。
此外,这里简单介绍一下最近比较流行的IPv6协议。IPv6协议全称Internet Protocol Version 6,即IP协议的6.0版本,通常又称为下一代因特网协议,IPv6是Internet工程任务组(IETF)开发设计的用来替代现行IPv4协议的一种新IP协议。IPv6和IPv4作用大致相同,开发的目的主要是为了缓解IPv4地址空间的压力,另外还弥补了IPv4协议的一些问题,包括端对端IP连接、服务质量(QoS)、安全性、扩展性及即插即用等。
2.3.2 端口扫描原理
前面简要地介绍了计算机之间是如何通信的,从中可以看出,入侵者如果想要探测目标计算机都开放了哪些端口、提供了哪些服务,就需要先与目标端口建立TCP连接,这也就是“扫描”的出发点。
1.端口扫描原理
尝试与目标主机的某些端口建立连接,如果目标主机该端口有回复(见三次握手中的第二次),则说明该端口开放,即为“活动端口”。
2.扫描原理分类
(1)全TCP连接
这种扫描方法使用三次握手,与目标计算机建立标准的TCP连接。需要说明的是,这种古老的扫描方法很容易被目标主机记录。
(2)半打开式扫描(SYN扫描)
在这种扫描技术中,扫描主机自动向目标计算机的指定端口发送SYN数据段,表示发送建立连接请求。
a.如果目标计算机的回应TCP报文中SYN=1,ACK=1,则说明该端口是活动的,接着扫描主机传送一个RST给目标主机拒绝建立TCP连接,从而导致三次握手过程的失败。
b.如果目标计算机的回应是RST,则表示该端口为“死端口”,这种情况下,扫描主机不用做任何回应。
由于扫描过程中,全连接尚未建立,所以大大降低了被目标计算机的记录的可能性,并且加快了扫描的速度。
(3)FIN扫描
在前面介绍过的TCP报文中,有一个字段为FIN,FIN扫描则依靠发送FIN来判断目标计算机的指定端口是否活动。
发送一个FIN=1的TCP报文到一个关闭的端口时,该报文会被丢掉,并返回一个RST报文。但是,如果当FIN报文到一个活动的端口时,该报文只是简单的丢掉,不会返回任何回应。
从FIN扫描可以看出,这种扫描没有涉及任何TCP连接部分,因此,这种扫描比前两种都安全,可以称之为秘密扫描。
(4)第三方扫描
第三方扫描又称“代理扫描”,这种扫描是利用第三方主机来代替入侵者进行扫描。这个第三方主机一般是入侵者通过入侵其他计算机而得到的,该“第三方”主机常被入侵者称之为“肉鸡”。这些“肉鸡”一般为安全防御系数极低的个人计算机。
2.3.3 端口扫描应用
1.工具一:X-Port
(1)功能简介
多线程方式扫描目标主机开放端口,扫描过程中根据TCP/IP堆栈特征被动识别操作系统类型,若没有匹配记录,尝试通过NetBIOS判断是否为Windows系列操作系统并尝试获取系统版本信息。
该工具提供了两种端口扫描方式供选择:① 标准TCP连接扫描;② SYN方式扫描。
其中“SYN扫描”和“被动识别操作系统”功能实现均使用“Raw Socket”构造数据包,不需要安装额外驱动程序,但必须运行于Windows 2000系统之上。
(2)使用方法
C:\x-port>xport
X-Port v1.2 - command line port scanner, code by glacier
http://www.xfocus.org
glacier@xfocus.org
Usage: xport <Host> <Ports Scope> [Options]
<Ports Scope> means:
<Start Port>[-<End Port>][,Port1,Port2-Port3,...]
[Options] means:
-m [mode] : specify scan mode (tcp/syn), default is tcp connect mode
-t [count]: specify threads count, default is 50
-v : display verbose information
例:xport www.xxx.com 80 -m syn
xport 192.168.1.1 2-1024 -t 200 -v
(3)实例
使用命令:
xport www.****.edu.cn 2-90
如图2-47所示。

图2-47
从结果可以看出,前90个端口中开放了7个:
è Port 9 is opened: Discard
è Port 13 is opened: Daytime
è Port 21 is opened: FTP <Control>
è Port 22 is opened: SSH
è Port 25 is opened: SMTP
è Port 37 is opened: Time
è Port 80 is opened: HTTP
从扫描结果可知,该服务器提供的服务还是相当齐全的。但是要注意到,这里是以TCP全连接方式进行的端口扫描,这样的话,入侵者的IP很可能被目标计算机记录下来,因此,X-Port还可以按照SYN的方式进行扫描,也就是半打开式扫描。在这种扫描方式下,入侵者的扫描行为不容易被目标主机察觉,但可能存在漏报的现象。
2.工具二:PortScanner
(1)简介
PortScanner是由StealthWasp编写的一款基于图形界面的端口扫描软件,界面如图2-48所示。
(2)使用方法
在“Target IP”中填入目标IP,在“Scan port”中填入扫描端口范围。最后单击“scan”按钮开始扫描,如图2-49所示。

图2-48 图2-49
3.工具三:SuperScan
(1)简介
SuperScan是一个集“端口扫描”、“ping”、“主机名解析”于一体的扫描器。
(2)功能
è 检测主机是否在线。
è IP和主机名之间的相互转换。
è 通过TCP连接试探目标主机运行的服务。
è 扫描指定范围的主机端口。
è 支持使用文件列表来指定扫描主机范围。
其界面如图2-50所示。
(3)界面说明
IP地址栏:
“开始IP”:填入目标网段起始IP。
“结束IP”:填入目标网段结束IP。
(4)实例
扫描一个网段,探测该网段有哪些活动主机,活动主机开放了哪些端口。
填入目标网络IP范围,如图2-51所示。

图2-50 图2-51
进行主机和服务扫描设置,如图2-52所示。
设置扫描选项,如图2-53所示。

图2-52 图2-53
单击“开始”按钮,开始扫描,得到的扫描结果可通过查看HTML结果来进行查看。
2.3.4 操作系统识别
每种操作系统都开放有不同的端口供系统间通信使用,因此从端口号上也可以大致判断目标主机的操作系统。一般认为开有135、139端口的主机为Windows系统。如果除了135、139外,还开放了5000端口,则该主机为Windows XP操作系统。
2.3.5 常见问题与解答
问:使用端口扫描器为何扫不出QQ端口?
答:QQ通信时候使用的是UDP协议。前面介绍过,UDP协议在通信的时候是不建立连接的。而端口扫描器是基于TCP协议的,通过“连接”或“半连接”测试方式来确定端口是否开放。所以,端口扫描器扫不出QQ开放的端口。





