网络协议端口号详解.docx
《网络协议端口号详解.docx》由会员分享,可在线阅读,更多相关《网络协议端口号详解.docx(19页珍藏版)》请在冰豆网上搜索。
网络协议端口号详解
协议端口号详解
计算机"端口"是英文port的译义,可以认为是计算机与外界通讯交流的出口。
其中硬件领域的端口又称接口,如:
USB端口、串行端口等。
软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。
在网络技术中,端口(Port)有好几种意思。
集线器、交换机、路由器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。
我们这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻辑意义上的端口。
那么TCP/IP协议中的端口指的是什么呢?
如果把IP地址比作一间房子,端口就是出入这间房子的门。
真正的房子只有几个门,但是一个IP地址的端口可以有65536(即:
256×256)个之多!
端口是通过端口号来标记的,端口号只有整数,围是从0到65535(256×256)。
在Internet上,各主机间通过TCP/TP协议发送和接收数据报,各个数据报根据其目的主机的ip地址来进行互联网络中的路由选择。
可见,把数据报顺利的传送到目的主机是没有问题的。
问题出在哪里呢?
我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据报传送给众多同时运行的进程中的哪一个呢?
显然这个问题有待解决,端口机制便由此被引入进来。
本地操作系统会给那些有需求的进程分配协议端口(protocalport,即我们常说的端口),每个协议端口由一个正整数标识,如:
80,139,445,等等。
当目的主机接收到数据报后,将根据报文首部的目的端口号,把数据发送到相应端口,而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。
说到这里,端口的概念似乎仍然抽象,那么继续跟我来,别走开。
端口其实就是队,操作系统为各个进程分配了不同的队,数据报按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己的队的大小。
不光接受数据报的进程需要开启它自己的端口,发送数据报的进程也需要开启端口,这样,数据报中将会标识有源端口,以便接受方能顺利的回传数据报到这个端口。
端口详解
在开始讲什么是端口之前,我们先来聊一聊什么是port呢?
常常在网络上听说『我的主机开了多少的port,会不会被入侵呀!
?
』或者是说『开那个port会比较安全?
又,我的服务应该对应什么port呀!
?
』呵呵!
很神奇吧!
怎么一部主机上面有这么多的奇怪的port呢?
这个port有什么作用呢?
!
由于每种网络的服务功能都不相同,因此有必要将不同的封包送给不同的服务来处理,所以啰,当你的主机同时开启了FTP与WWW服务的时候,那么别人送来的资料封包,就会依照TCP上面的port来给FTP这个服务或者是WWW这个服务来处理,当然就不会搞乱啰!
(注:
嘿嘿!
有些很少接触到网络的朋友,常常会问说:
『咦!
为什么你的计算机同时有FTP、WWW、E-Mail这么多服务,但是人家传资料过来,你的计算机怎么知道如何判断?
计算机真的都不会误判吗?
!
』现在知道为什么了吗?
!
对啦!
就是因为port不同嘛!
你可以这样想啦,有一天,你要去银行存钱,那个银行就可以想成是『主机』,然后,银行当然不可能只有一种业务,里头就有相当多的窗口,那么你一进大门的时候,在门口的服务人员就会问你说:
『嗨!
你好呀!
你要做些什么事?
』你跟他说:
『我要存钱呀!
』,服务员接着就会告诉你:
『喝!
那么请前往三号窗口!
那边的人员会帮您服务!
』这个时候你总该不会往其它的窗口跑吧?
!
""这些窗口就可以想成是『port』啰!
所以啦!
每一种服务都有特定的port在监听!
您无须担心计算机会误判的问题呦!
)
·每一个TCP联机都必须由一端(通常为client)发起请求这个port通常是随机选择大于1024以上的port号来进行!
其TCP封包会将(且只将)SYN旗标设定起来!
这是整个联机的第一个封包;
·如果另一端(通常为Server)接受这个请求的话(当然啰,特殊的服务需要以特殊的port来进行,例如FTP的port21),则会向请求端送回整个联机的第二个封包!
其上除了SYN旗标之外同时还将ACK旗标也设定起来,并同时时在本机端建立资源以待联机之需;
·然后,请求端获得服务端第一个响应封包之后,必须再响应对方一个确认封包,此时封包只带ACK旗标(事实上,后继联机中的所有封包都必须带有ACK旗标);
·只有当服务端收到请求端的确认(ACK)封包(也就是整个联机的第三个封包)之后,两端的联机才能正式建立。
这就是所谓的TCP联机的'三段式交握(Three-WayHandshake)'的原理。
经过三向交握之后,呵呵!
你的client端的port通常是高于1024的随机取得的port至于主机端则视当时的服务是开启哪一个port而定,例如WWW选择80而FTP则以21为正常的联机信道!
总而言之,我们这里所说的端口,不是计算机硬件的I/O端口,而是软件形式上的概念.工具提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。
计算机之间相互通信的时候,分为两种方式:
一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。
对应这两种协议的服务提供的端口,也就分为TCP端口和UDP端口。
那么,如果攻击者使用软件扫描目标计算机,得到目标计算机打开的端口,也就了解了目标计算机提供了那些服务。
我们都知道,提供服务就一定有服务软件的漏洞,根据这些,攻击者可以达到对目标计算机的初步了解。
如果计算机的端口打开太多,而管理者不知道,那么,有两种情况:
一种是提供了服务而管理者没有注意,比如安装IIS的时候,软件就会自动增加很多服务,而管理员可能没有注意到;一种是服务器被攻击者安装木马,通过特殊的端口进行通信。
这两种情况都是很危险的,说到底,就是管理员不了解服务器提供的服务,减小了系统安全系数。
端口作用
我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。
那么,主机是怎样区分不同的网络服务呢?
显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系。
实际上是通过“IP地址+端口号”来区分不同的服务的。
需要注意的是,端口并不是一一对应的。
比如你的电脑作为客户机访问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3457”这样的端口。
端口在入侵中的作用
有人曾经把服务器比作房子,而把端口比作通向不同房间(服务)的门,如果不考虑细节的话,这是一个不错的比喻。
入侵者要占领这间房子,势必要破门而入(物理入侵另说),那么对于入侵者来说,了解房子开了几扇门,都是什么样的门,门后面有什么东西就显得至关重要。
入侵者通常会用扫描器对目标主机的端口进行扫描,以确定哪些端口是开放的,从开放的端口,入侵者可以知道目标主机大致提供了哪些服务,进而猜测可能存在的漏洞,因此对端口的扫描可以帮助我们更好的了解目标主机,而对于管理员,扫描本机的开放端口也是做好安全防的第一步。
分类
软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。
面向连接服务和无连接服务
可以先了解面向连接和无连接协议(Connection-OrientedandConnectionlessProtocols)面向连接服务的主要特点有:
面向连接服务要经过三个阶段:
数据传数前,先建立连接,连接建立后再传输数据,数据传送完后,释放连接。
面向连接服务,可确保数据传送的次序和传输的可靠性。
无连接服务的特点是:
无连接服务只有传输数据阶段。
消除了除数据通信外的其它开销。
只要发送实体是活跃的,无须接收实体也是活跃的。
它的优点是灵活方便、迅速,特别适合于传送少量零星的报文,但无连接服务不能防止报文的丢失、重复或失序。
区分"面向连接服务"和"无连接服务"的概念
区分特别简单、形象的例子是:
打和写信。
两个人如果要通,必须先建立连接--拨号,等待应答后才能相互传递信息,最后还要释放连接--挂。
写信就没有那么复杂了,地址填好以后直接往邮筒一扔,收信人就能收到。
TCP/IP协议在网络层是无连接的(数据包只管往网上发,如何传输和到达以及是否到达由网络设备来管理)。
而"端口",是传输层的容,是面向连接的。
协议里面低于1024的端口都有确切的定义,它们对应着因特网上常见的一些服务。
这些常见的服务划分
划分为使用TCP端口(面向连接如打)和使用UDP端口(无连接如写信)两种。
网络中可以被命名和寻址的通信端口是操作系统的一种可分配资源。
由网络OSI(开放系统互联参考模型,OpenSystemInterconnectionReferenceModel)七层协议可知,传输层与网络层最大的区别是传输层提供进程通信能力,网络通信的最终地址不仅包括主机地址,还包括可描述进程的某种标识。
所以TCP/IP协议提出的协议端口,可以认为是网络通信进程的一种标识符。
应用程序(调入存运行后一般称为:
进程)通过系统调用与某端口建立连接(binding,绑定)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都从该端口输出。
在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写方式访问类似于文件描述符,每个端口都拥有一个叫端口号的整数描述符,用来区别不同的端口。
由于TCP/IP传输层的TCP和UDP两个协议是两个完全独立的软件模块,因此各自的端口号也相互独立。
如TCP有一个255号端口,UDP也可以有一个255号端口,两者并不冲突。
端口号有两种基本分配方式:
第一种叫全局分配这是一种集中分配方式,由一个公认权威的中央机构根据用户需要进行统一分配,并将结果公布于众,第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回本地唯一的端口号,进程再通过合适的系统调用,将自己和该端口连接起来(binding,绑定)。
TCP/IP端口号的分配综合了以上两种方式,将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。
每一个标准服务器都拥有一个全局公认的端口叫周知口,即使在不同的机器上,其端口号也相同。
剩余的为自由端口,以本地方式进行分配。
TCP和UDP规定,小于256的端口才能作为保留端口。
按端口号可分为3大类:
(1)公认端口(WellKnownPorts):
从0到1023,它们紧密绑定(binding)于一些服务。
通常这些端口的通讯明确表明了某种服务的协议。
例如:
80端口实际上总是HTTP通讯。
(2)注册端口(RegisteredPorts):
从1024到49151。
它们松散地绑定于一些服务。
也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。
例如:
许多系统处理动态端口从1024左右开始。
(3)动态和/或私有端口(Dynamicand/orPrivatePorts):
从49152到65535。
理论上,不应为服务分配这些端口。
实际上,机器通常从1024起分配动态端口。
但也有例外:
SUN的RPC端口从32768开始。
系统管理员可以"重定向"端口:
一种常见的技术是把一个端口重定向到另一个地址。
例如默认的HTTP端口是80,不少人将它重定向到另一个端口,如8080。
如果是这样改了,要访问本文就应改用这个地址:
8080/net/port.htm(当然,这仅仅是理论上的举例)。
实现重定向是为了隐藏公认的默认端口,降低受破坏率。
这样如果有人要对一个公认的默认端口进行攻击则必须先进行端口扫描。
大多数端口重定向与原端口有相似之处,例如多数HTTP端口由80变化而来:
81,88,8000,8080,8888。
同样POP的端口原来在110,也常被重定向到1100。
也有不少情况是选取统计上有特别意义的数,象1234,23456,34567等。
许多人有其它原因选择奇怪的数,42,69,666,31337。
近来,越来越多的远程控制木马(RemoteAccessTrojans,RATs)采用相同的默认端口。
如NetBus的默认端口是12345。
BlakeR.Swopes指出使用重定向端口还有一个原因,在UNIX系统上,如果你想侦听1024以下的端口需要有root权限。
如果你没有root权限而又想开web服务,你就需要将其安装在较高的端口。
此外,一些ISP的防火墙将阻挡低端口的通讯,这样的话即使你拥有整个机器你还是得重定向端口。
按对应的协议类型端口有两种:
TCP端口和UDP端口。
由于TCP和UDP两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也可以有235端口,两者并不冲突。
1.周知端口(WellKnownPorts)
周知端口是众所周知的端口号,围从0到1023,其中80端口分配给WWW服务,21端口分配给FTP服务等。
我们在IE的地址栏里输入一个网址的时候(比如)是不必指定端口号的,因为在默认情况下WWW服务的端口号是“80”。
网络服务是可以使用其他端口号的,如果不是默认的端口号则应该在地址栏上指定端口号,方法是在地址后面加上冒号“:
”(半角),再加上端口号。
比如使用“8080”作为WWW服务的端口,则需要在地址栏里输入“:
8080”。
但是有些系统协议使用固定的端口号,它是不能被改变的,比如139端口专门用于NetBIOS与TCP/IP之间的通信,不能手动改变。
2.动态端口(DynamicPorts)
动态端口的围是从1024到65535。
之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配。
动态分配是指当一个系统进程或应用程序进程需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配一个供它使用。
当这个进程关闭时,同时也就释放了所占用的端口号。
端口的相关工具
1netstat-an
的确,这并不是一个工具,但他是查看自己所开放端口的最方便方法,在cmd中输入这个命令就可以了。
如下:
C:
\>netstat-an
ActiveConnections
ProtoLocalAddressForeignAddressState
TCP0.0.0.0:
1350.0.0.0:
0LISTENING
TCP0.0.0.0:
4450.0.0.0:
0LISTENING
TCP0.0.0.0:
10250.0.0.0:
0LISTENING
TCP0.0.0.0:
10260.0.0.0:
0LISTENING
TCP0.0.0.0:
10280.0.0.0:
0LISTENING
TCP0.0.0.0:
33720.0.0.0:
0LISTENING
UDP0.0.0.0:
135*:
*
UDP0.0.0.0:
445*:
*
UDP0.0.0.0:
1027*:
*
UDP127.0.0.1:
1029*:
*
UDP127.0.0.1:
1030*:
*
这是我没上网的时候机器所开的端口,两个135和445是固定端口,其余几个都是动态端口。
2fport.exe和mport.exe
这也是两个命令行下查看本地机器开放端口的小程序,其实与netstat-an这个命令小异,只不过它能够显示打开端口的进程,信息更多一些而已,如果你怀疑自己的奇怪端口可能是木马,那就用他们查查吧。
3activeport.exe(也称aports.exe)
还是用来查看本地机器开放端口的东东,除了具有上面两个程序的全部功能外,他还有两个更吸引人之处:
图形界面以及可以关闭端口。
这对菜鸟来说是个绝对好用的东西,推荐使用喔。
4superscan3.0
它的大名你不会没听说过吧,纯端口扫描类软件中的NO.1,速度快而且可以指定扫描的端口,不多说了,绝对必备工具。
保护好自己的端口
刚接触网络的朋友一般都对自己的端口很敏感,总怕自己的电脑开放了过多端口,更怕其中就有后门程序的端口,但由于对端口不是很熟悉,所以也没有解决办法,上起网来提心吊胆。
其实保护自己的端口并不是那么难,只要做好下面几点就行了:
1)查看:
经常用命令或软件查看本地所开放的端口,看是否有可疑端口;
2)判断:
如果开放端口中有你不熟悉的,应该马上查找端口大全或木马常见端口等资料(网上多的很),看看里面对你那个可疑端口的作用描述,或者通过软件查看开启此端口的进程来进行判断;
3)关闭:
如果真是木马端口或者资料中没有这个端口的描述,那么应该关闭此端口,你可以用防火墙来屏蔽此端口,也可以用本地连接-TCP/IP-高级-选项-TCP/IP筛选,启用筛选机制来筛选端口;
注意:
判断时候要慎重,因为一些动态分配的端口也容易引起你多余的怀疑,这类端口一般比较低,且连续。
还有,一些狡猾的后门软件,他们会借用80等一些常见端口来进行通信(穿透了防火墙),令人防不胜防,因此不轻易运行陌生程序才是关键。
怎样查看端口
一台服务器有大量的端口在使用,怎么来查看端口呢?
有两种方式:
一种是利用系统置的命令,一种是利用第三方端口扫描软件。
1.用“netstat-an”查看端口状态
在Windows2000/XP中,可以在命令提示符下使用“netstat-an”查看系统端口状态,可以列出系统正在开放的端口号及其状态.
2.用第三方端口扫描软件
第三方端口扫描软件有许多,界面虽然千差万别,但是功能却是类似的。
这里以“Fport”(可到与“netstat-an”相似,但是它不仅能够列出正在使用的端口号及类型,还可以列出端口被哪个应用程序使用.
计算机常用端口一览表:
见端口列表
TCP端口
7=回显
9=丢弃
11=在线用户
13=时间服务
15=网络状态
17=每日引用
18=消息发送
19=字符发生器
20=ftp数据
21=文件传输
22=SSH端口
23=远程终端
25=发送
31=MastersParadise木马
37=时间
39=资源定位协议
41=DeepThroat木马
42=WINS主机名服务
43=WhoIs服务
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
146=FC-Infector木马
158=服务
170=打印服务
179=BGP
194=IRCPORT
213=TCPOVERIPX
220=IMAP3
389=目录服务
406=IMSPPORT
411=DC++
421=TCPWrappers
443=安全WEB访问
445=SMB(交换服务器消息块)
456=HackersParadise木马
464=Kerberros认证
512=远程执行或卫星通讯
513=远程登录与查询
514=SHELL/系统日志
515=打印服务
517=Talk
518=网络聊天
520=EFS
525=时间服务
526=日期更新
530=RPC
531=RASmin木马
532=新闻阅读
533=紧急广播
540=UUCP
543=Kerberos登录
544=远程shell
550=who
554=RTSP
555=Ini-Killer木马
556=远程文件系统
560=远程监控
561=监控
636=安全目录服务
666=AttackFTP木马
749=Kerberos管理
750=KerberosV4
911=DarkShadow木马
989=FTPS
990=FTPS
992=TelnetS
993=IMAPS
999=DeepThroat木马
1001=Silencer木马
1010=Doly木马
1011=Doly木马
1012=Doly木马
1015=Doly木马
1024=NetSpy木马
1042=Bla木马
1045=RASmin木马
1080=SOCKS代理
1090=Extreme木马
1095=Rat木马
1097=Rat木马
1098=Rat木马
1099=Rat木马
1109=KerberosPOP
1167=私用
1170=PsyberStreamServer
1214=KAZAA下载
1234=Ultors/恶鹰木马
1243=Backdoor/SubSeven木马
1245=VooDooDoll木马
1349=BODLL木马
1352=LotusNotes
1433=SQLSERVER
1492=FTP99CMP木马
1494=CITRIX
1503=Netmeeting
1512=WINS解析
1524=IngresLock后门
1600=Shivka-Burka木马
1630=网易泡泡
1701=L2TP
1720=H323
1723=PPTP(虚拟专用网)
1731=Netmeeting
1755=流媒体服务
1807=SpySender木马
1812=Radius认证
1813=Radius评估
1863=MSN聊天
1981=ShockRave木马
1999=Backdoor木马
2000=TransScout-Remote-Explorer木马
2001=TransScout木马
2002=TransScout/恶鹰木马
2003=TransScout木马
2004=TransScout木马
2005=TransScout木马
2023=Ripper木马
2049=NFS服务器
2053=KNETD
2115=Bugs木马
2140=DeepThroat木马
2401=CVS
2535=恶鹰
25