如何使用 Shell 脚本来查看多个服务器的端口是否打开?
2020-06-15 19:29
323 查看
我们在进行服务器配置的时候,经常要查看服务器的某个端口是否已经开放。如果服务器只有一两台的话,那很好办,只需要使用
nc命令一个个查看即可。
但是,如果你的服务器是个集群,有很多台呢?那如果还一个个手动去检查的话,效率肯定是无比低下的,年底裁员名单里肯定有你。
在这种情况下,我们完全可以使用 Shell 脚本配合 nc 命令来达到我们的目的。而且,不管服务器有几台,需要检查的端口有几个,都可以实现这样的目标。
在本文里,我们用 Shell 脚本来实现两个需求:
- 扫描多台服务器的一个端口是否打开
- 扫描多台服务器的多个端口是否打开
在开始之前,我们先来了解一下 nc 命令。
nc 命令简介
nc 是英文单词 netcat 的缩写,它是通过使用 TCP 或 UDP 的网络协议的连接来读或写数据,可以直接被第三方程序或脚本直接调用。
同时,它是一款功能非常强大的网络调试工具,因为它可以创建几乎所有你所需要的连接方式。
nc 工具主要有三种功能模式:连接模式、监听模式、通道模式。它的一般使用格式如下:
$ nc [-options] [HostName or IP] [PortNumber]
接下来,我们就用 Shell 脚本结合 nc 命令来实现我们的两个需求。
1. 扫描多台服务器的一个端口是否打开
在这里,我们先把需要查询的所有服务器地址全部放在一个
server-list.txt文件里,每个地址单独一行,如下:
# cat server-list.txt 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5 192.168.1.6 192.168.1.7
然后,我们再用 for 循环依次扫描
server-list.txt里对应服务器的端口是否打开。在这里,我们扫描 22 端口是否打开。
# vi port_scan.sh #!/bin/sh for server in `more server-list.txt` do #echo $i nc -zvw3 $server 22 done
最后,我们给这个脚本赋予可执行权限即可。
$ chmod +x port_scan.sh
之后,我们就可以用这个脚本来自动依次检查多个服务器的 22 端口是否已打开。
# sh port_scan.sh Connection to 192.168.1.2 22 port [tcp/ssh] succeeded! Connection to 192.168.1.3 22 port [tcp/ssh] succeeded! Connection to 192.168.1.4 22 port [tcp/ssh] succeeded! Connection to 192.168.1.5 22 port [tcp/ssh] succeeded! Connection to 192.168.1.6 22 port [tcp/ssh] succeeded! Connection to 192.168.1.7 22 port [tcp/ssh] succeeded!
2. 扫描多台服务器的多个端口是否打开
在这里,我们同样把需要查询的所有服务器地址全部放在一个
server-list.txt文件里,每个地址单独一行。这里就不重复演示了。
与此同时,我们也把需要查询的服务器端口放在另一个
port-list.txt文件里,每个端口单独一行,如下所示:
# cat port-list.txt 22 80
然后,我们再用 for 循环依次扫描
server-list.txt里对应服务器
port-list.txt所列的端口是否打开。注意,这里用到了两个 for 循环,第一层是服务器列表,第二层是端口列表。
# vi multiple_port_scan.sh #!/bin/sh for server in `more server-list.txt` do for port in `more port-list.txt` do #echo $server nc -zvw3 $server $port echo "" done done
最后,我们给这个脚本赋予可执行权限即可。
$ chmod +x multiple_port_scan.sh
之后,我们就可以用这个脚本来自动依次检查多个服务器的多个端口是否已打开。
# sh multiple_port_scan.sh Connection to 192.168.1.2 22 port [tcp/ssh] succeeded! Connection to 192.168.1.2 80 port [tcp/http] succeeded! Connection to 192.168.1.3 22 port [tcp/ssh] succeeded! Connection to 192.168.1.3 80 port [tcp/http] succeeded! Connection to 192.168.1.4 22 port [tcp/ssh] succeeded! Connection to 192.168.1.4 80 port [tcp/http] succeeded! Connection to 192.168.1.5 22 port [tcp/ssh] succeeded! Connection to 192.168.1.5 80 port [tcp/http] succeeded! Connection to 192.168.1.6 22 port [tcp/ssh] succeeded! Connection to 192.168.1.6 80 port [tcp/http] succeeded! Connection to 192.168.1.7 22 port [tcp/ssh] succeeded! Connection to 192.168.1.7 80 port [tcp/http] succeeded!
公众号:良许Linux
有收获?希望老铁们来个三连击,给更多的人看到这篇文章
相关文章推荐
- 如何使用 Shell 脚本来查看多个服务器的端口是否打开? – 运维派
- 如何检查多个远程 Linux 系统是否打开了指定端口? | Linux 中国
- 如何判断服务器一个端口是否打开?
- 如何测试远程服务器的某个端口是否打开?
- 如何查看服务器是否开放某个端口
- 如何在运行 Windows XP Service Pack 2 的系统上使用脚本以编程方式打开端口供 SQL Server 使用
- 如何查看远程端口是否打开
- win7查看远程服务器(Linux)端口是否打开
- 如何查看远程端口是否打开
- Windows 如何查看端口是否已打开
- 如何查看服务器RAID卡信息的SHELL脚本和命令介绍
- 如何编写一个shell脚本查看某个进程是否在运行
- 如何查看服务器RAID卡信息的SHELL脚本和命令介绍
- 如何查看服务器RAID卡信息的SHELL脚本和命令介绍
- 如何判断服务器上端口是否打开
- 如何查看服务器RAID卡信息的SHELL脚本和命令介绍
- 绝对酷,如何解决asp.net中javascript脚本的问题(使用服务器控件执行客户端脚本)
- 如何查看一个指定端口被哪个程序使用
- CentOS 如何打开和查看端口
- 查看服务器RAID卡信息的SHELL脚本和命令介绍