如何使用 Shell 腳原本查看多個服務器的端口是否打開?

咱們在進行服務器配置的時候,常常要查看服務器的某個端口是否已經開放。若是服務器只有一兩臺的話,那很好辦,只須要使用 nc 命令一個個查看便可。bash

可是,若是你的服務器是個集羣,有不少臺呢?那若是還一個個手動去檢查的話,效率確定是無比低下的,年末裁人名單裏確定有你。服務器

在這種狀況下,咱們徹底可使用 Shell 腳本配合 nc 命令來達到咱們的目的。並且,無論服務器有幾臺,須要檢查的端口有幾個,均可以實現這樣的目標。網絡

在本文裏,咱們用 Shell 腳原本實現兩個需求:ssh

  • 掃描多臺服務器的一個端口是否打開
  • 掃描多臺服務器的多個端口是否打開

在開始以前,咱們先來了解一下 nc 命令。tcp

nc 命令簡介

nc 是英文單詞 netcat 的縮寫,它是經過使用 TCP 或 UDP 的網絡協議的鏈接來讀或寫數據,能夠直接被第三方程序或腳本直接調用。工具

同時,它是一款功能很是強大的網絡調試工具,由於它能夠建立幾乎全部你所須要的鏈接方式。ui

nc 工具主要有三種功能模式:鏈接模式、監聽模式、通道模式。它的通常使用格式以下:spa

$ nc [-options] [HostName or IP] [PortNumber]
複製代碼

接下來,咱們就用 Shell 腳本結合 nc 命令來實現咱們的兩個需求。調試

1. 掃描多臺服務器的一個端口是否打開

在這裏,咱們先把須要查詢的全部服務器地址所有放在一個 server-list.txt 文件裏,每一個地址單獨一行,以下:code

# 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!
複製代碼

碼字不易,若是您以爲有幫助,麻煩點個贊再走唄~

-----------------

我是良許,世界500強外企 Linux 開發工程師,專業生產 Linux 乾貨。歡迎關注個人公衆號「良許Linux」,回覆「1024」獲取最新最全的技術資料,回覆「入羣」進入高手如雲技術交流羣。

img
img
相關文章
相關標籤/搜索