目? ? ? ? ? ? ? ?錄
一、要求
二、解決方案
(一)解決思路
(二)方案
三、腳本程序實現
(一)腳本代碼和解釋
1、腳本代碼
2、代碼解釋
(二)腳本驗證
1、腳本編輯
2、給予執行權限
3、運行腳本,查看效果
四、擴展
一、要求
????? ?一般我們做linux系統中的應用程序,會用到不同的網絡端口,有時候一個應用會用到很多端口。比如我們常見的流媒體平臺,由于有很多用戶會接入進來,所以,用到的接口成千上萬都有可能。
????????那么,如何查看主機上的所有關心的端口的狀態,以便進一步的進行分析、維護呢?
二、解決方案
(一)解決思路
?????? 通過查詢指定的端口,若端口能夠訪問,或者能夠跟端口建立連接,說明端口是處于開放的狀態,否則,端口是關閉的。
(二)方案
?????? (1)配置需要了解的所有端口;
?????? (2) 遍歷每個端口,查看端口是否可用?
?????? (3)若端口可用,打印端口是開放的;否則,打印出信息:端口是關閉的。
三、腳本程序實現
????????直接把腳本寫出來,分享給大家。
(一)腳本代碼和解釋
1、腳本代碼
????????由于我的環境是centos7.9,編寫如下bash代碼,可以在centos7及其以后版本運行,如下:
#!/bin/bash
HOST=$1
PORTS="22 25 80 3306 8080 26088 26089"
for PORT in $PORTS; do(nc -z -w5 $HOST $PORT) &> /dev/nullif [ $? -eq 0 ]; thenecho "$PORT is opening....."elseecho "$PORT close"fi
done
2、代碼解釋
?????????腳本的功能是檢查指定主機上的多個端口是否開放。 解釋如下:
(1)HOST=$1
????????這行代碼將腳本的第一個參數($1)賦值給變量 HOST。當你運行這個腳本時,你需要提供一個主機名或 IP 地址作為參數。
(2)PORTS="22 25 80 3306 8080 26088 26089"
????????這行代碼定義了一個字符串變量 PORTS,它包含了多個要用來檢查的端口號,這些端口號由空格分隔。
(3)for PORT in $PORTS; do
????????這是一個 for 循環的開始,它會遍歷 PORTS 變量中的每一個端口號,并將每個端口號臨時賦值給變量 PORT。
(4)(nc -z -w5 $HOST $PORT) &> /dev/null
????????這行代碼使用 nc(netcat)命令來嘗試建立到指定主機和端口的連接。若本機沒有安裝netcat,可以使用yum install netcat 在centos中進行安裝。
????????-z 參數告訴 nc 只在掃描端口時使用,而不發送任何數據。
????????-w5 參數設置了等待連接的超時時間為 5 秒。
????????&> /dev/null 將命令的標準輸出和標準錯誤都重定向到 /dev/null,這意味著任何輸出或錯誤信息都不會在終端上顯示。
(5)if [ $? -eq 0 ]; then
????????這行代碼檢查上一個命令(即 nc 命令)的退出狀態。$? 是一個特殊的變量,用于存儲上一個命令的退出狀態。如果 nc 命令成功連接到端口(即端口是開放的),它會以狀態碼 0 退出。
(6)echo "$PORT is opening....."
????????如果 nc 命令成功(即端口開放),這行代碼會輸出該端口的狀態信息。
(7)else
????????這是 if 語句的 else 部分,它會在 nc 命令失敗時執行。
(8)echo "$PORT close"
????????如果 nc 命令失敗(即端口關閉),這行代碼會輸出該端口的狀態信息。
(9)fi
????????這行代碼標志著 if 語句的結束。
(10)done
????????這行代碼標志著 for 循環的結束。
(二)腳本驗證
1、腳本編輯
??????? 使用編輯器,比如vi,把代碼輸入進去;
??????? 保存這個腳本到一個文件中,比check_port.sh
2、給予執行權限
????? chmod +x w check_port.sh
3、運行腳本,查看效果
???? 可以運行這個腳本來檢查進程的運行情況,如下:
[root@localhost home]#
[root@localhost home]# ll
總用量 12
-rwxr-xr-x 1 root root 260 3月 3 13:24 check_port.sh
-rw-r--r-- 1 root root 76 3月 2 23:11 host.txt
-rwxr-xr-x 1 root root 547 3月 2 23:11 select_host.sh
[root@localhost home]#
[root@localhost home]#
[root@localhost home]# sh check_port.sh localhost
22 is opening.....
25 is opening.....
80 close
3306 is opening.....
8080 close
26088 is opening.....
26089 is opening.....
[root@localhost home]#
四、擴展
? ? ? ? 在實際使用中, 可能還要查看其他端口,直接在腳本文件添加即可;若需要查看多個host的情況,可以修改腳本,或者直接在命令中添加多個host即可。