且构网

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

Windows Server入门系列之十六 端口、连接与端口扫描

更新时间:2022-01-22 06:08:48

端口与连接是网络中两个非常基础的概念,本篇博文将介绍相关的一些基础知识。

1.端口

我们在学习网络技术时经常会提到80端口、21端口等,这些端口到底指的是什么呢?要注意,它们可不是像路由器或交换机上的那些物理接口,而是一些纯粹的逻辑接口,也就是说,它们都是操作系统里面的概念。

端口其实就是应用层的程序与传输层的TCP或UDP协议之间联系的通道。

根据TCP/IP模型,所有的应用层程序所产生的数据,都要向下交给传输层去继续处理。传输层的协议只有两个:可靠的TCP和不可靠的UDP。而应用层的协议可是多种多样,如负责网页浏览的http、负责文件传输的ftp、负责邮件发送和接收的smtp、pop3等。

我们的操作系统又允许同时运行多个程序,这就产生了一个问题:传输层的协议如何来区分它所接收到的数据到底是由应用层的哪个协议产生的呢?所以就必须得提供一种机制以使传输层协议能够区分开不同的应用层程序。这个机制就是端口。

每个端口都对应着一个应用层的程序,当一个应用程序要与远程主机上的应用程序通信时,传输层协议就为该应用程序分配一个端口,不同的应用程序有着不同的端口,以使来往的数据互不干扰。
Windows Server入门系列之十六 端口、连接与端口扫描

每个端口都有一个唯一的编号,在TCP/IP协议中是用一个16位的二进制数来为端口编号,所以端口号的取值范围为0~65535。这其中0端口未用,为了合理地分配使用端口,对它们进行了以下分类:

  • 1~1023之间的端口固定地分配给一些常用的应用程序,称为固定端口。如http采用80端口,FTP采用21端口,Telnet采用23端口等。


  • 1024~65535之间的端口随机的分配给那些发出网络连接请求的应用程序,称为随机端口,比如1024端口就是分配给第一个向系统发出申请访问网络的程序,程序关闭之后就会释放所占用的端口,然后可以再分配给其它程序使用。


另外根据所使用的传输层协议不同,端口又可以分为TCP端口和UDP端口两种类型。所以对端口的准确描述应该是:传输层协议+端口号。如HTTP默认使用TCP的80端口,FTP默认使用TCP的21端口,SMTP默认使用TCP的25端口,POP3默认使用TCP的110端口,HTTPS默认使用TCP的443端口,DNS使用UDP的53端口,远程桌面协议(RDP)默认使用TCP的3389端口,telnet使用TCP的23端口,Windows访问共享资源使用TCP的445端口等。对于这些常见的固定端口我们应该熟记。

Windows Server入门系列之十六 端口、连接与端口扫描

2.连接

当我们在电脑上打开浏览器访问一个网站(比如百度)时,这就要用到http协议,刚才提到http使用的是tcp的80端口,那么是否就是要在我们的电脑(客户端)和百度服务器(服务器端)都开放TCP80端口,然后通过它来传送数据呢?

其实不然,所谓的固定端口,主要是在服务器端使用,即百度服务器使用的是TCP80端口,而我们客户端使用的则是随机端口。原因很简单,我们打开浏览器后,很可能要访问很多个不同的网站,如果客户端只使用一个TCP80端口,那么如何来区分这些不同的网站呢?

所以实际情况是:所有的网站服务器端都开放TCP80端口,而我们客户端每访问一个网站,就会开放一个随机端口去与它们的TCP80端口进行连接。这样在客户端就通过不同的端口号将这些网站区分开了。

客户端和服务器端之间的通信,数据必须要通过各自的端口发送和接收。因此就可以把它们之间的通信看做在两个端口之间建立起来的逻辑通道上进行数据交换,这个逻辑通道就称做“连接”。
Windows Server入门系列之十六 端口、连接与端口扫描

比如上图中的ClientA就通过TCP1234端口与Server的TCP80端口之间建立了一个连接;ClientB通过TCP1234端口与Server的TCP21端口之间建立了一个连接。

对于服务器来说,只要是发往自己TCP80端口的数据,就交给Web服务去处理;只要是发往自己TCP21端口的数据,就交给FTP服务去处理。

连接的建立有两种模式:主动连接和被动连接。主动连接是指当端口开启之后,进程通过该端口主动发出连接请求,进而建立的连接;被动连接则是当端口开启之后,进程在该端口等待别的计算机发来的连接请求,最终所建立的连接。

在客户端/服务器模式的网络架构下,连接的建立一般都是由客户端申请一个动态端口发起主动连接,而服务器端则要一直开放相应的固定端口,然后等待与客户端建立被动连接。


3.查看端口与连接

如何查看电脑中开放的端口或已经建立好的连接呢?最简单易行的方法是利用系统中自带的netstat命令。netstat命令的用法比较多,这里主要用到两个参数:-a和-n,而且这两个参数通常都是结合在一起使用的:“netstat–an”。
-a参数的作用是显示所有活动的TCP连接以及计算机侦听的TCP和UDP端口,-n参数的作用是以数字的形式显示地址和端口(也就是显示IP地址,否则是显示计算机的名字)。

比如,我们先在浏览器中打开百度的网页,然后执行“pingwww.baidu.com”命令解析出百度的IP地址61.135.169.105,接下来执行“netstat-an”命令,从中找到我们与百度之间所建立的连接。

Windows Server入门系列之十六 端口、连接与端口扫描

上图中标记出来的部分,10.12.13.160是我本机的IP,它后面的端口号50977就是我这台客户端开放的随机端口;61.135.169.105:80,代表百度服务器及它的TCP80端口,最后面的ESTABLISHED表示这是一个已经建立好的连接。

通过“netstat-an”命令,不仅可以查看连接,而且还可以查看我们的电脑开放了哪些端口

Windows Server入门系列之十六 端口、连接与端口扫描

上图中最后的状态为“LISTENING"(监听)的记录中所包含的端口号,就是我们目前所开放的端口。

这些端口随时在等待别的计算机与它建立连接,也就是说它们在随时等待为其它计算机提供服务,比如其中的TCP445端口就是用来提供文件共享服务的。

在”netstat-an“命令的执行结果中,”本地地址“部分可能会有三种不同的表现形式:本机IP、0.0.0.0和127.0.0.1。

  • 本机IP后面的端口一般都是由用户所运行的应用程序打开的,比如打开了浏览器,就会打开了一个1024之后的随机端口。

  • 0.0.0.0表示的是本机默认所开放的端口,这些端口一般都是由一些系统服务默认开启的,不过也可以关闭,比如135端口就是由WMI(“MicrosoftWindows管理规范”)服务开启的,可以方便用户对计算机进行远程管理。这些默认开放的端口它们所对应的外部地址一般也都是0.0.0.0,即表示它们对所有的外部机器开放,它们的状态一般为Listening,处于监听状态。

  • 127.0.0.1后面的端口通常都是由一些需要调用本地服务的程序开启的,后面的外部地址一般也都为127.0.0.1。


“状态”部分,最常见的两种状态为:”Listening“(监听)、”Established“(已建立)。除此之外,还有很多其它不同的状态,这些状态通常都与建立TCP连接的三次握手过程密切相关。


4.端口扫描


在网络入侵或网络安全检测的过程中,端口扫描都是比较重要的一个步骤。通过端口扫描,一方面可以了解目标计算机开放了哪些端口,每个端口都对应了一种服务,因而可以根据相应的服务有针对性的展开入侵;另一方面,通过查看自身计算机开放了哪些端口,也可以发现安全隐患。
端口扫描类的工具特别多,一些工具比较简单,如L-ScanPort,设置好要扫描的IP地址范围以及端口列表,就可以对指定网段内的计算机进行扫描。

Windows Server入门系列之十六 端口、连接与端口扫描

还有一类扫描软件的功能比较强大,除了能够扫描开放端口之外,一般还兼具弱口令猜解的功能,如X-Scan。
在X-Scan的扫描参数中可以设置扫描的IP地址范围以及扫描模块。
Windows Server入门系列之十六 端口、连接与端口扫描

如果目标计算机存在漏洞,则会直接得到扫描结果。

Windows Server入门系列之十六 端口、连接与端口扫描



本文转自 yttitan 51CTO博客,原文链接:http://blog.51cto.com/yttitan/1301143