1.4 认识端口
端口(Port)可以认为是计算机与外界通信交流的出口。其中硬件领域的端口又称接口,如USB端口、串行端口等。软件领域的端口一般是指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(输入/输出)缓冲区。
1.4.1 端口的分类
端口是传输层的内容,是面向连接的,对应着网络上的一些常见服务。这些常见的服务可分为使用TCP端口(面向连接,如打电话)和使用UDP端口(无连接,如写信)两种。
在网络中,可以被命名和寻址的通信端口是一种可分配资源。由网络OSI(Open System Interconnection Reference Model,开放系统互连参考模型)协议可知,传输层与网络层的区别是传输层提供进程通信能力,网络通信的最终地址不仅包括主机地址,还包括可描述进程的某种标识。因此,当应用程序(调入内存运行后一般就称为进程)通过系统调用与某端口建立连接(Binding,绑定)之后,传输层传给该端口的数据都被相应进程所接收,相应进程发给传输层的数据都从该端口输出。
在网络技术中,端口大致有两种意思:一是物理意义上的商品,如集线器、交换机、路由器等用于连接其他网络设备的接口;二是逻辑意义上的端口,一般指TCP/IP协议中的端口,范围为0~65535,如浏览网页服务的80号端口,用于FTP服务的21号端口等。
逻辑意义上的端口有多种分类标准,常见的分类标准有如下两种。
1.按端口号分布划分
按端口号分布可以分为公认端口、注册端口、以及动态和/或私有端口等。服务器常见应用端口如表1.4.1-1所示。
表1.4.1-1 服务器常见应用端口
(1)公认端口
公认端口包括的端口号从0到1023,它们紧密绑定于一些服务。通常这些端口的通信明确表明了某种服务的协议,比如80号端口分配给HTTP服务、21号端口分配给FTP服务等。
(2)注册端口
注册端口包括的端口号为1024~49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的,比如许多系统处理动态端口从1024左右开始。
(3)动态和/或私有端口
动态和/或私有端口包括的端口号从49152到65535。理论上,不应为服务分配这些端口。但是一些木马和病毒喜欢这样的端口,因为这些端口不易引起人们的注意,从而很容易屏蔽。
2.按所提供的服务方式划分
根据所提供的服务方式,端口又可分为TCP端口和UDP端口两种。一般直接与接收方进行的连接方式,大多采用TCP。只是把信息发布到网上而不去关心信息是否到达(即“无连接方式”),则大多采用UDP。
使用TCP协议的常见端口主要有如下几种。
(1)FTP协议端口
FTP协议用于定义文件传输协议,使用21号端口。若计算机打开FTP服务,就意味着启动了文件传输服务,下载文件和上传主页都要用到FTP服务。
(2)Telnet协议端口
一种用于远程登录的端口,用户可以自己的身份远程连接到计算机上,通过这种端口可提供一种基于DOS模式的通信服务。如支持纯字符界面BBS的服务器会将23号端口打开,以提供对外服务。
(3)SMTP协议端口
现在很多邮件服务器都使用这个简单邮件传送协议来发送邮件。如常见免费邮件服务中使用的就是此邮件服务端口,所以在电子邮件设置中经常会看到有SMTP端口设置栏,服务器开放的是25号端口。
(4)POP3协议端口
POP3协议用于接收邮件,通常使用110号端口。只要有相应使用POP3协议的程序(如Outlook等),就可以直接使用邮件程序接收邮件(如果是使用126邮箱的用户,就没有必要先进入126网站,再进入自己的邮箱来收信)。
使用UDP协议的常见端口主要有如下几种。
(1)HTTP协议端口
这是用户使用最多的协议,也即“超文本传输协议”。当上网浏览网页时,就要在提供网页资源的计算机上打开80号端口以提供服务。通常的“WWW服务”、“Web服务器”等使用的就是这个端口。
(2)DNS协议端口
DNS用于域名解析服务,这种服务在Windows NT系统中用得最多。Internet上的每一台计算机都有一个网络地址与之对应,这个地址就是IP地址,它以纯数字形式表示。但由于这种表示方法不便于记忆,于是就出现了域名,访问计算机时只需要知道域名即可,域名和IP地址之间的变换由DNS服务器来完成(DNS用的是53号端口)。
(3)SNMP协议端口
简单网络管理协议,用来管理网络设备,使用161号端口。
(4)QQ协议端口
QQ程序既提供服务又接收服务,使用无连接协议,即UDP协议。QQ服务器使用8000号端口侦听是否有信息到来,客户端使用4000号端口向外发送信息。
1.4.2 查看端口
为了查找目标主机上开放了哪些端口,可以使用某些扫描工具对目标主机一定范围内的端口进行扫描。若掌握目标主机上的端口开放情况,黑客可能会进一步对目标主机进行攻击。
在Windows系统中,可以使用netstat命令查看端口。在“命令提示符”窗口中运行“netstat -a -n”命令,即可看到以数字形式显示的TCP和UDP连接的端口号及其状态,具体步骤如下。
步骤1:按Alt+R组合键打开运行窗口,在文本框中输入“cmd”命令,单击“确定”按钮,如图1.4.2-1所示。
图1.4.2-1
步骤2:打开命令提示符窗口后输入“netstat -a -n”命令,查看TCP和UDP连接的端口号及其状态,如图1.4.2-2所示。
图1.4.2-2
如果攻击者使用扫描工具对目标主机进行扫描,即可获取目标计算机打开的端口情况,并了解目标计算机提供了哪些服务。根据这些信息,攻击者即可对目标主机有一个初步了解。
如果在管理员不知情的情况下打开了太多端口,则可能出现两种情况:一种是提供了服务,而管理者没有注意到,如安装IIS服务时软件就会自动地增加很多服务;另一种是服务器被攻击者植入了木马程序,通过特殊的端口进行通信。这两种情况都比较危险,管理员不了解服务器提供的服务,就会减小系统的安全系数。