咱們在進行服務器配置的時候,常常要查看服務器的某個端口是否已經開放。若是服務器只有一兩臺的話,那很好辦,只須要使用 nc
命令一個個查看便可。服務器
可是,若是你的服務器是個集羣,有不少臺呢?那若是還一個個手動去檢查的話,效率確定是無比低下的,年末裁人名單裏確定有你。網絡
在這種狀況下,咱們徹底可使用 Shell 腳本配合 nc 命令來達到咱們的目的。並且,無論服務器有幾臺,須要檢查的端口有幾個,均可以實現這樣的目標。ssh
在本文裏,咱們用 Shell 腳原本實現兩個需求:tcp
掃描多臺服務器的一個端口是否打開工具
掃描多臺服務器的多個端口是否打開spa
在開始以前,咱們先來了解一下 nc 命令。調試
nc 是英文單詞 netcat 的縮寫,它是經過使用 TCP 或 UDP 的網絡協議的鏈接來讀或寫數據,能夠直接被第三方程序或腳本直接調用。code
同時,它是一款功能很是強大的網絡調試工具,由於它能夠建立幾乎全部你所須要的鏈接方式。server
nc 工具主要有三種功能模式:鏈接模式、監聽模式、通道模式。它的通常使用格式以下:ip
$ nc [-options] [HostName or IP] [PortNumber]
接下來,咱們就用 Shell 腳本結合 nc 命令來實現咱們的兩個需求。
在這裏,咱們先把須要查詢的全部服務器地址所有放在一個 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!
在這裏,咱們一樣把須要查詢的全部服務器地址所有放在一個 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!
https://mp.weixin.qq.com/s/z3G_Cz4z3S2EICcselU-wA