我们在工作的过程中,经常会使用ping端口
,来查看服务是否正常运行,因为它是最有效的故障排除技术之一。
运维或后端人员每天都使用ping命令
,它依靠ICMP协议
来检索有关远程主机的操作信息,如下所示:
PS C:\Users\superjson> ping www.baidu.com
正在 Ping www.a.shifen.com [180.101.50.242] 具有 32 字节的数据:
来自 180.101.50.242 的回复: 字节=32 时间=21ms TTL=52
来自 180.101.50.242 的回复: 字节=32 时间=12ms TTL=52
来自 180.101.50.242 的回复: 字节=32 时间=12ms TTL=52
来自 180.101.50.242 的回复: 字节=32 时间=18ms TTL=52
180.101.50.242 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 12ms,最长 = 21ms,平均 = 15ms
但仅对主机进行ping操作
并不总是足够的:你可能需要对服务器上的特定端口执行ping操作
。
此特定端口可能与如下相关:
数据库
Apache Web
服务器
网络上的代理服务器
接下来,我便详细介绍如何使用各种不同的命令来ping特定端口
。
为什么ping
特定端口?上文也已解释清楚。
但正赶上ChatGPT
比较火,可以借助ChatGPT
来回答,如下所示:
ping特定端口
可以帮助确认网络是否有效,并确定与特定主机的连接状态。
首先,我们可以使用telnet
命令,后跟IP
地址和端口,如下所示:
$ telnet <ip_address> <port_number>
telnet
命令对Windows
和Unix
操作系统都有效,比如我想执行如下命令:
telnet 172.16.0.12 80
但报出-bash: telnet: command not found
错误,如下图所示:
可以执行如下命令,在系统上安装telnet
:
$ sudo apt-get install telnet
或
$ yum install telnet
我的服务器已安装telnet
,假设我想ping
百度的80
端口,来查看该端口是否处于活动状态,如下所示:
[root@VM_0_12_centos ~]# telnet 36.152.44.95 80
Trying 36.152.44.95...
Connected to 36.152.44.95.
Escape character is '^]'.
能够连接到远程主机,仅意味着远程端口已启动并正在运行。
为了退出Telnet
实用程序,您可以使用Ctrl + ]
击键来转义,并执行q
命令来退出,如下图所示:
当然,你还可以指定域名而不是IP
地址,然后指定要ping
的特定端口,如下所示:
$ telnet <domain_name> <port_number>
为了对特定的端口号执行ping
操作:
请对netcat
命令执行nc
命令
对verbose
执行v
选项
对scanning
执行z
并指定主机和要进行ping
操作的端口,如下所示:
$ nc -vz <ip_address> <port_number>
当然,你还可以指定域名,然后指定要ping
的端口,如下所示:
$ nc -vz <domain_name> <port_number>
该命令适用于Unix
系统,但你可以在线找到适用于Windows
的netcat
替代产品。
Windows
的netcat
替代产品链接地址为:https://github.com/diegocr/netcat
如果你在系统上未找到nc
命令,如下图所示:
可以执行如下命令,使用sudo命令在系统上安装nc
,如下所示:
$ sudo apt-get install netcat
或
$ yum install netcat
假设,你要远程ping
亚马逊的80
端口,则可以运行以下命令:
$ nc -vz amazon.com 80
如上图所示,连接已在端口80
上成功打开。
如果尝试对未打开的特定端口执行ping
操作,比如远程亚马逊的389
端口,如下所示:
$ nc -vz amazon.com 389
则会收到以下错误消息:
amazon.com [<ip_address>] 389 (ldap) : Connection refused
ping
特定端口的一种非常简单的方法,是将nmap
命令与端口的-p
选项一起使用,并指定端口号以及要扫描的主机名,如下所示:
$ nmap -p <port_number> <ip_address>
当然,你也可以指定扫描的域名,如下所示:
$ nmap -p <port_number> <domain_name>
注意:如果您使用的是nmap
,请注意,您应该了解它可能附带的法律问题。
对于本教程,我们假设您正在扫描本地端口仅出于监视目的。
如果主机上没有nmap
命令,则必须安装它,可以使用如下命令:
$ sudo apt-get install nmap
或
$ yum install nmap
比如,您要在默认LDAP
端口389
上对本地网络上的192.168.178.35/24
执行ping
操作。
$ nmap -p 389 192.168.178.35/24
如上图所示,该虚拟机上的端口389
已打开,表明其中正在运行OpenLDAP
服务器。
为了使用nmap
扫描一定范围的端口,你可以对端口
使用p
选项执行nmap
,并指定要ping
的范围,如下所示:
$ nmap -p 1-100 <ip_address>
或
$ nmap -p 1-100 <hostname>
同样,如果我们尝试扫描192.168.178.35/24
上的端口范围,则将运行以下命令:
$ nmap -p 1-100 192.168.178.35/24
如果你在Windows
环境中运行计算机,则可以使用Powershell ping
特定的端口号。
如果你计划在自动脚本中包含此功能,则此选项非常有用。
【注意】为了使用Powershell ping
特定端口,您必须使用Test-NetConnection
命令,后跟要ping
的IP
地址和端口号,如下所示:
$ Test-NetConnection <ip_address> -p <port_number>
假如,我们要对端口389
上的192.168.178.35/24
主机执行ping
操作,如下所示:
$ Test-NetConnection 192.168.178.35 -p 389
在最后一行,您可以看到TCP
调用是否成功:在我们的例子中,它确实到达了389
端口上的端口。
可以参考博文:详细分析yum和apt-get的区别
可以参考博文:解决sudo: apt-get: command not found的错误
可以参考博文:解决-bash: xxx: command not found的问题
在本教程中,您学习了可用于ping特定端口
的所有方法。
但从技术上讲,没有诸如ping
主机上的特定端口之类的事情。
向远程主机发送ping
请求,意味着你正在使用ICMP协议
来检查网络连接。
ICMP
主要用于诊断将阻止您访问主机的网络问题。
当您ping端口
时,实际上是在计算机和特定端口上的远程主机之间建立TCP
连接。
但是,工程师通常说他们正在ping端口
,但实际上他们正在扫描或打开TCP
连接。
当然,本教程中使用的大多数命令都可以在Windows
,Unix
或MacOS
操作系统上使用。
祝你学习愉快!!!