如何使用 Shell 脚本来查看多个服务器的端口是否打开?

原创 社长  2019-05-27 12:19:55  阅读 123 次 评论 0 条
重庆专业seo
摘要:

  配置服务器时,我们经常需要检查服务器的端口是否打开。如果只有一两个服务器,这很容易做到,只需使用nc命令逐一检查。  但是,如果你的服务器是个集群,有很多台呢?那如果还一个个手动去检查的话,效率肯定是无比低下的,年底裁员名单里肯定有你。  在这种情况下,我们完全可以使用 Shell 脚本配合 nc 命令来达到我们的目的。而且,不管服务器有几台,需要检查的端口有几个,都可以实现这样的目标。  在本文里,我们用 Shell 脚本来实现两个需求:  扫描多台服务器的一个端口是否打开  扫描多台服务

  配置服务器时,我们经常需要检查服务器的端口是否打开。如果只有一两个服务器,这很容易做到,只需使用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!


本文地址:http://dxf6.com/post/33.html
版权声明:本文为原创文章,版权归 社长 所有,欢迎分享本文,转载请保留出处!
重庆专业seo
数据湾

发表评论


表情

还没有留言,还不快点抢沙发?