十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
bash,cat /path/to/your/script.sh,“使用 Shell 腳本查看多個服務(wù)器的端口是否打開

在運(yùn)維工作中,我們經(jīng)常需要檢查服務(wù)器的端口是否開放,我們需要檢查多個服務(wù)器的端口,這時候就需要編寫一個 Shell 腳本來實(shí)現(xiàn)這個功能,本文將介紹如何使用 Shell 腳本來查看多個服務(wù)器的端口是否打開。
1. 準(zhǔn)備工作
我們需要獲取所有需要檢查的服務(wù)器的 IP 地址或者主機(jī)名,這些信息可以存儲在一個文本文件中,每行一個 IP 地址或者主機(jī)名。
192、168.1.1 192、168.1.2 192、168.1.3
接下來,我們需要確定要檢查的端口范圍,通常情況下,我們會檢查常見的服務(wù)端口,如 80、443、8080 等,在本例中,我們將檢查這些端口。
2. 編寫 Shell 腳本
根據(jù)上述準(zhǔn)備工作,我們可以編寫如下 Shell 腳本:
!/bin/bash
定義服務(wù)器列表文件和端口范圍
SERVER_FILE="servers.txt"
PORT_RANGE="80-443"
遍歷服務(wù)器列表文件中的每一行
while read server; do
使用 for 循環(huán)遍歷端口范圍
for port in $(seq $PORT_RANGE); do
使用 nc 命令檢查端口是否開放
nc -z -w 5 $server $port > /dev/null 2>&1
根據(jù) nc 命令的返回值判斷端口是否開放
if [ $? -eq 0 ]; then
echo "服務(wù)器 $server 的 $port 端口是開放的"
else
echo "服務(wù)器 $server 的 $port 端口是關(guān)閉的"
fi
done
done < $SERVER_FILE
將以上腳本保存為 check_ports.sh,并給予執(zhí)行權(quán)限:
chmod +x check_ports.sh
3. 運(yùn)行腳本
運(yùn)行腳本,查看多個服務(wù)器的端口是否開放:
./check_ports.sh
腳本將會輸出每個服務(wù)器在指定端口范圍內(nèi)的端口狀態(tài),如果需要查看詳細(xì)的錯誤信息,可以將腳本中的 > /dev/null 這一行刪除,這樣,當(dāng)端口關(guān)閉時,nc 命令會輸出詳細(xì)的錯誤信息。
for port in $(seq $PORT_RANGE); do
...(省略其他代碼)
if [ $? -ne 0 ]; then 注意這里應(yīng)該是 $? != 0 而不是 $? == 0
nc_error=$(nc_error) 這里假設(shè)存在一個變量用于存儲錯誤信息,實(shí)際應(yīng)用中可能需要修改這部分代碼以獲取詳細(xì)錯誤信息
echo "服務(wù)器 $server 的 $port 端口是關(guān)閉的,錯誤信息:$nc_error"
else
echo "服務(wù)器 $server 的 $port 端口是開放的"
endif
done < $SERVER_FILE
4. 其他問題與解答
A1. 如何獲取所有可用的 IP 或者主機(jī)名?
答:可以使用 nmap 或者 ping 命令來獲取所有可用的 IP 或者主機(jī)名,使用 nmap 可以掃描整個網(wǎng)絡(luò)并顯示在線主機(jī)的信息:
nmap --all-hosts | grep "Up" | cut -d' ' -f2 | sort | uniq > available_ips.txt