—
如何查看端口占用情况
我们分windows和linux两种不同的平台分别介绍。
一、windows平台
在windows平台下,查看端口占用情况,最常见的DOS命令就是NETSTAT命令。
打开运行-->输入“CMD”回车。(如何打开运行,就不用我多说了吧,在开始菜单点右键,选择菜单中的“运行”)
我们可以先查看一下netstat命令的用法:
在提示符下输入 :netstat /?
上面显示的各个参数的含义和用法,查看端口情况,最常用的参数是-a,-n和-o。如果不使用任何参数,则只显示当前活动的连接(TCP连接)
我们先以-a为例来看一下执行后的效果(截图为部分内容),-a表示显示所有连接和侦听端口(包括TCP和UDP):
下面我们简单介绍一下这个命令的输出结果:
输入netstat -a的命令后,输出结果为四列,显示的当前所有连接和侦听的端口信息。
第一列为协议,主要是TCP的端口占用情况和UDP的端口占用情况。
第二列为本地地址和端口。
第三列为外部地址和端口。
然后解释几个大家可能看不明白的地方。
首先大家可能好奇activate和0.0.0.0是什么鬼?
这里解释一下:
1、0.0.0.0代表本机上可用的任意地址。 比如0.0.0.0:135 表示本机上所有地址的135端口,这样多ip计算机就不用重复显示了。
2、TCP 0.0.0.0:80表示在所有的可用接口上监听TCP80端口
3、0.0.0.0为默认路由,即要到达不再路由表里面的网段的包都走0.0.0.0这条规则
在本地地址显示为0.0.0.0,如果使用-a参数,外部地址显示为activate,如果使用-an参数,则外部地址也显示为0.0.0.0
然后127.0.0.1就是表示你本机ip地址的意思了。
可能有同学会问,activate是什么意思?其实activate和0.0.0.0是一样的,就像127.0.0.1,外部地址显示为guyanbing(我的机器名),http,就表示80端口,https:就表示443端口。如果加上-n参数,则会显示为127.0.0.1,80和443。因为-n参数的意思就是以数字的形式显示IP和端口号。这也是-a和-an两个参数的区别。
-an参数 -a参数
0.0.0.0 activate
127.0.0.1 guyanbing(机器名)
443 https
80 http
这里的命令为什么要用-an,而不是-n呢?因为如果不加-a这个参数,那么只会显示当前已经建立连接的端口情况,而不会显示所有的端口情况,处于监听状态(LISTENING) 的端口是显示不出来的。
192.168.0.101就是表示当前网卡上的IP地址,这个大家都明白。
然后[::]、[::1]和[fe80::7c54:4a4c:9eb1:40e8%20]又是什么鬼呢?
其实这个是指本机的IPV6址。你可以使用ipconfig /all命令查看本机的IPV6地址信息,如下图:
以笔者本机为例,对应关系如下:
IPV4 IPV6
0.0.0.0 [::]
127.0.0.1 [::1]
192.168.0.101 [fe80::7c54:4a4c:9eb1:40e8%20]
在HOSTS文件(位于C:WindowsSystem32driversetc目录下)中可以查看。
可能有同学问了,*:* 是什么意思?为什么所有UDP协议的外部连接都是*:*呢?
大家都知道,在计算机中,*是一个通配符,可以表示任意字符,所以这里的*:*就表示任意地址和任意端口。
那为啥只有UDP协议中是*:*呢?
这是因为TCP协议和UDP协议是不一样的,TCP协议是一个握手协议,必须要跟远端的一个地址和端口建立建立连接,所以一定是一个确定的地址和端口。就像打电话,必须要有确定的远端的电话号码才可以通话。
而UDP是一个广播协议,不需要跟远端建立连接,所以并没有确定的地址和端口。
关于TCP和UDP的区别,我会在之后的文章可详细介绍,不是本文和重点。
第四列是状态,显示当前端口处于什么状态。
大家可以看到,这里的状态只是指的TCP连接的状态,因为对于UDP协议而言,是不需要状态的。在状态部分有不同的单词,分别表示什么意思呢?我们分别介绍一下:
LISTENING:(Listening for a connection.)侦听来自远方的TCP端口的连接请求
SYN-SENT:(Active; sent SYN. Waiting for a matching connection request after having sent a connection request.)再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:(Sent and received SYN. Waiting for a confirming connection request acknowledgment after having both received and sent connection requests.)再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED:(Connection established.)代表一个打开的连接
FIN-WAIT-1:(Closed; sent FIN.)等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:(Closed; FIN is acknowledged; awaiting FIN.)从远程TCP等待连接中断请求
CLOSE-WAIT:(Received FIN; waiting to receive CLOSE.)等待从本地用户发来的连接中断请求
CLOSING:(Closed; exchanged FIN; waiting for FIN.)等待远程TCP对连接中断的确认
LAST-ACK:(Received FIN and CLOSE; waiting for FIN ACK.)等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:(In 2 MSL (twice the maximum segment length) quiet wait after close. )等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:(Connection is closed.)没有任何连接状态
关于netstat命令的具体使用,我们在之后发布的《防黑必备技能之端口篇(3)》中会有更详细的介绍,敬请关注。
另外这些状态跟TCP/IP协议密切相关,大家如果想要了解这些状态的具体含义,最好还是先了解一下TCP/IP协议,这不是本节的重点,所以不做具体介绍,之后应该会有相关的文章专门去讲这方面的知识。
二、LINUX平台
在LINUX平台下,我们有三种方式确定某一端口的占用情况:
1、使用LSOF命令。
注意,为了显示更多内容,最好使用ROOT帐号登录。比如要查看80端口的使用情况,应在命令行窗口输入lsof -i:80,如果没有显示内容,则表示该端口未开放,如果开放,则会显示相应信息,如下图:
2、使用netstat命令
netstat命令各个参数说明如下:
-t : 指明显示TCP端口
-u : 指明显示UDP端口
-l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)
-p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。
-n : 不进行DNS轮询,显示IP(可以加速操作) 即可显示当前服务器上所有端口及进程服务,于grep结合可查看某个具体端口及服务情况
netstat -ntlp //查看当前所有tcp端口·
netstat -ntulp |grep 80 //查看所有80端口使用情况·
netstat -an | grep 3306 //查看所有3306端口使用情况·
如图:查看所有端口的连接情况:netstat -aptn
查看所有的UDP连接:netstat -nupl
查看所有的TCP连接:netstat -ntpl
注:LINUX平台内容和图片来自互联网,如有侵权请私信告之。
除了上面讲到的在WINDOWS和linux平台下查看端口占用情况的方法之外,还有一个命令也可以查看端口打开情况,那就是TELNET命令。
这个命令主要是测试远程电脑指定的端口是否打开,使用格式如下:
telnet ip 端口 (如果不写端口,默认连接23号端口)
例:
测试本机23端口:telnet 127.0.0.1 23 或者telnet 127.0.0.1
测试指定电脑的80端口:telnet 10.0.0.27 80
不过这个命令并不是windows的内部命令,需要安装该服务才可以使用该命令,TELNET服务端和客户端,在WIN7WIN8win10中都默认没有安装该客户端功能。所以如果在命令行下直接执行该命令,会提示不是内部或外部命令。这是你需要安装该服务才可以。
而服务器端也需要安装telnet服务才可以访问,绝大多数的服务器都关闭了TELNET服务和23端口,所以这个在实际应用中用的并不是太多。大家了解一下就好了。