网络协议端口(信息安全工程师典藏版)
在通信原理里也提到了端口这个概念,但是没有详细讲解,今天详细讲解以下 “网络协议端口”,因为这个“东东”也是黑客们常常利用渗透入侵的手段。 网络协议
一、先讲一讲几种不同的“端口”的定义
计算机“端口”是英文port的译义,可以认为是计算机与外界通讯交流的出口。其中硬件领域的端口又称接口,如:USB端口、串行端口等。
软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基础输入输出)缓冲区。
在网络技术中,端口(Port)有好几种意思。集线器、交换机、路由器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。
而今天要将的“网络协议端口”不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口。
二、网络协议端口简单描述
网络协议中的端口指的是什么呢?如果把IP地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536(即:2562256)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0到65535(256256)。
在Internet上,各主机间通过TCP/IP协议发送和接收数据报,各个数据报根据其目的的主机的ip地址来进行互联网中的路由选择。可见,把数据报顺利的传送到目的的主机是没有问题的。问题出在哪里呢?大家都知道大多数操作系统能够都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据报传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,短裤机制便由此被引入进来。
操作系统会给那些有需求的进程分配协议端口(protocol port,即大家常说的端口),每个协议端口由一个正整数标识,如:80,139,445等等。当目的主机接收到数据报后,将根据报文首部的目的端口号,把数据发送到相应端口,而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。说到这里,端口的概念似乎仍然抽象,那么继续讲解。
端口其实就是对操作系统为各个进程分配了不同的队,数据报按照目的的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己的队的大小。
接受数据报的进程需要开启它自己的端口,发送数据报的进程也需要开启端口,这样,数据报中将会标识有源端口,以便接受方能顺利的回传数据报到这个端口。
三、“网络协议端口”详解
常常在网络上听说“某主机开了多少的port,会不会被入侵呀?!”或者是说“开那个port会比较安全?又,某的服务应该对应什么port呀?!”很神奇把!怎么一部主机上面有这么多的奇怪的port呢?这个port有什么作用呢?!
由于每种网络的服务功能都不相同,因此有必要将不同的封包送给不同的服务来处理,所以,当你的主机同时开启了FTP与WWW服务的时候,那么别人送来的资料封包,就会依照TCP上面的port号码来给FTP这个服务或者是WWW这个服务来处理,当然就不会错乱!很多人会问说:“为什么计算机通南宁市有FTP、WWW、E-Mail这么多服务,传资料过来,计算机怎么知道如何判断?计算机真的都不会误判吗?”现在知道为什么了吧!?“对了!就是因为port不同嘛”!每一种服务都有特定的port在监听!您无须担心计算机会误判的问题。
每一个TCP联机都必须由一端(通常为client)发起请求这个port通常是随机选择大于1024以上的port号来进行!其TCP封包会将(且只将)SYN旗标设定起来!这是联机的第一个封包;如果另一端(通常为Server)接受这个请求的话(当然,特殊的服务需要以特殊的port来进行,例如FTP的port21),则会向请求端送回整个联机的第二个封包!其上除了SYN旗标之外同时还将ACK旗标也设定起来,并同时在本机端建立资源以待联机之需;然后,请求端获得服务端第一个响应封包之后,必须再响应对方一个确认封包,此时封包只带ACK旗标(事实上,后继联机中的所有封包都必须带有ACK旗标);
只有当服务端收到请求端的确认(ACK)封包(也就是整个联机的第三个封包)之后,两端的联机才能正是建立。这就是所谓的TCP联机的“三段交握(Three-Way Handshake)的原理。经过三向交握之后,你的client端的port通常是高于1024的随机取得的port至于主机端则视当时的服务是开启哪一个port而定,例如WWW选择80而FTP则以21为正常的联机信道!”
四、端口的分类
- 按对应的协议类型端口的两种
一种是TCP端口,一种是UDP端口。计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议:一种是发送以后就不管了,不去确认信息是否到达,这种方式大多代用UDP协议。对应者两种协议的服务提供的端口,也就分为TCP端口和UDP端口。
由网络OSI七层协议可知,TCP/UDP是工作在传输层的,传输层与网络层最大的区别是传输层提供进程通信能力,网络通信的最终地址不仅包括主机地址,还包括可描述进程的某些标识。所以TCP/IP协议提出的协议端口,可以认为是网路通信进程的一种标识符。
在应用程序中(调入内存运行后一般称为:进程)通过系统调用与某端口建立链接(binding,绑定)后,传输层传给该端口的数据都被响应的进程所接收,相应进程发送给传输层的数据都从该端口输出。在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写方式访问类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,用来区别不同的端口。由于TCP/IP传输层的TCP和UDP两个协议是两个完全独立的软件模块,因此各自的端口号也相互独立。如TCP有一个255号端口,UDP也可以有一个255号端口,两者并不冲突。端口号有两种基本分配方式:第一种叫全局分配这是一种集中分配方式,由一个公认权威的中央机构根据用户需要进行统一分配,并将结构公布于众,第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程在通过合适的系统调用,将自己和该端口连接起来(binding,绑定),TCP/IP端口号的分配综合了以上两种方式,将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。每一个标准服务器都拥有一个全局公认的端口叫周知口,即使在不同的机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。TCP和UDP规定,小于256的端口才能作为保留端口。 - 按端口号可分为3大类
公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。
注册端口(RegisteredPorts):从1024到49151.它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。
动态和/或私有端口(Dynamicand/PrivatePorts):从49152到65535.理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。
五、已知服务、木马常用端口列表 - TCP端口
7=回显
9=丢弃
11=在线用户
13=时间服务
15=网络状态
17=每日引用
18=消息发送
19=字符发生器
20=ftp数据
21=文件传输
22=SSH端口
23=远程端口
25=发送邮件
31=Master Paradise木马
37=时间
39=资源定位协议
41=DeepThroat木马
42=WINS主机名服务
43=Whols服务
58=DMSetup木马
59=个人文件服务
63=WHOIS端口
69=TFTP服务
70=信息检索
79=查询在线用户
80=WEB网页
88=Kerberros5认证
101=主机名
102=ISO
107=远程登录终端
109=pop2邮件
110=pop3邮件
111=SUN远程控制
113=身份验证
117=UUPC
119=nntp新闻组
121=JammerKillah木马
135=本地服务
138=隐形大盗
139=文件共享
143=IMAP4邮件