作为系统管理员、网络工程师或应用程序开发人员,需要检查远程服务器上的端口是否打开,以便您可以判断所检查的服务是否正在运行。比如远程服务器上运行一个web应用,想要检测这个服务是否正常运行,可以检测一下这个服务的端口80或者443等端口是否打开。再比如远程服务器开通了ssh以及ftp等服务,有些时候通过ssh连接远程服务器,这个时候连接不了,就可以通过以下方法来检查服务端口是否打开。下面就来看一下如何检测远程服务器的端口的方式。

1、telnet命令检测

telnet是Windows和Linux上最常用的检查端口的命令。此命令的简单用法是telnet ip地址(或者域名) 端口。如果执行telnet 命令提示命令未发现,请执行"yum install telnet"。

[root@localhost etc]# telnet www.baidu.com 443

通过上图可以看出,百度https服务是打开着的,所以能够访问百度首页。如果远程服务器上的端口未打开。会提示以下报错。

从上图可以看出百度服务器上的3389未打开的。

2、nc命令检测

nc或netcat是一个实用程序,可以做很多TCP和UDP相关的事情,包括数据包传输,端口扫描等。要检查端口是否打开,如果执行nc提示命令未发现,执行"yum install nc"安装。接着可以通过执行以下命令"nc -vz IP地址或域名 端口"检测。

[root@localhost ~]# nc -vz www.baidu.com 443

如果远程服务器的端口未打开,或者服务器未启用,则会提示一个连接超时的错误,报错如下。

从上图中可以看出,检测服务器的3389端口显示连接超时,说明未开启服务。

3、nmap命令检测

nmap是一个用于网络扫描的开源实用程序。它不仅可以用于扫描打开的端口,还可以执行更多操作。 它可用于一次检查多个主机和端口。 该命令需要通过执行“yum install nmap”安装。

[root@localhost ~]# nmap www.baidu.com

从上图上可以看出远程服务器有俩端口是打开的。

4、执行/dev/tcp检测

Linux中所有内容都是文件,并且主机和端口的状态也可通过文件处理程序获得。如果没有上面几种可用的telnet或 nc(在 docker 容器中经常看到没有这些命令),则可以使用此方法检查远程端口是否打开。

linux中的一个特殊文件: /dev/tcp,打开这个文件就类似于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。

/dev/[tcp|upd]/host/port 只要读取或者写入这个文件,相当于系统会尝试连接:host 这台机器,对应port端口。如果主机以及端口存在,就建立一个socket 连接。将在,/proc/self/fd目录下面,有对应的文件出现。

要注意的是:/dev/tcp本身是不存在的。

语法格式为:

echo > /dev/tcp/[host]/[port] && echo "Port is open"
echo > /dev/udp/[host]/[port] && echo "Port is open"

上面的命令取决于远程服务是使用的哪种协议,是tcp还是udp协议,比如ssh是tcp协议,smtp使用的udp协议。具体可以使用对应的协议进行连接。命令使用方式如下。

[root@localhost ~]# echo > /dev/tcp/www.baidu.com/443 && echo "Port is open"

[root@localhost ~]# echo > /dev/tcp/www.baidu.com/3389 && echo "Port is open"

从上面的图上可以看出远程服务器端口是开着的会打印出“Port is open” ,如果没有打开的话会提示“Connection refused”。

总结:本文主要讲解了四种方式来检测远程服务器的服务或者端口是否正常启动或者打开,对于telent在window和Linux中都可以使用,然而nc和nmap是Linux服务器带的,需要安装对应的软件包才能使用,对于最后一种方式,对任何Linux系统都可以使用,不需要安装任何软件。

转自:百度安全验证 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐