在大規模網路環境中,逐一檢測數百台主機的特定埠口(如 SSH 22、HTTP 80、資料庫 3306)若採用串列方式,耗時極長。本文提供一個基於 telnet 與 Shell 背景任務的並行掃描方案,並進階優化為 nc/timeout 組合,大幅縮短掃描窗口。
mkdir -p ~/shell/telnet_port
cd ~/shell/telnet_port
# 快速生成測試 IP 範圍
for i in {88..93}; do echo "192.168.14.$i" >> ip.list; done
# 檢查清單
cat ip.list
# 192.168.14.88
# 192.168.14.89
# ...
telnet_port.sh#!/bin/bash
# 批量並行 Telnet 掃描指定埠口
# 用法: ./telnet_port.sh [port] [ip_list_file]
PORT=${1:-22}
IP_LIST=${2:-ip.list}
RESULT_FILE="telnet_result.txt"
ALIVE_FILE="telnet_alive.txt"
DEAD_FILE="telnet_die.txt"
# 清理舊結果
> "$RESULT_FILE"
# 並行掃描核心邏輯
while IFS= read -r ip; do
(
# 使用 timeout 避免卡住,EOF 送出 quit 結束連線
timeout 3 telnet "$ip" "$PORT" >> "$RESULT_FILE" 2>&1 <<EOF
quit
EOF
) & # 背景執行實現並行
done < "$IP_LIST"
# 等待所有背景任務完成
wait
# 結果分析:提取連線成功的 IP
grep -B1 '\]' "$RESULT_FILE" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | awk '{print $1}' | sort -u > "$ALIVE_FILE"
# 對比原始清單找出失聯 IP
sort "$IP_LIST" "$ALIVE_FILE" | uniq -u > "$DEAD_FILE"
echo "掃描完成:"
echo " 存活: $(wc -l < "$ALIVE_FILE")"
echo " 失聯: $(wc -l < "$DEAD_FILE")"
echo "詳細結果見 $RESULT_FILE"
chmod +x telnet_port.sh
./telnet_port.sh 22 ip.list & # 後台執行
# 輸出範例
掃描完成:
存活: 4
失聯: 2
詳細結果見 telnet_result.txt
telnet 交互式協議開銷大、無法精確控制超時。生產環境建議改用 nc (netcat) 或 bash 內建 /dev/tcp:
#!/bin/bash
PORT=${1:-22}
IP_LIST=${2:-ip.list}
while IFS= read -r ip; do
timeout 2 nc -z -w 1 "$ip" "$PORT" && echo "$ip" &
done < "$IP_LIST" | sort -u > alive_nc.txt
wait
#!/bin/bash
PORT=${1:-22}
IP_LIST=${2:-ip.list}
for ip in $(cat "$IP_LIST"); do
timeout 1 bash -c "cat </dev/null >/dev/tcp/$ip/$PORT" 2>/dev/null && echo "$ip" &
done | sort -u > alive_bash.txt
wait
| 方案 | 1000 IP 耗時 | 相依套件 | 適用場景 |
|---|---|---|---|
| Telnet + 背景任務 | ~45 秒 | telnet | 舊系統、需查看握手細節 |
| nc -z | ~12 秒 | netcat-openbsd | 標準生產環境首選 |
| Bash /dev/tcp | ~8 秒 | 無(需 Bash 編譯支援) | 極簡環境、容器內 |
| nmap -p | ~5 秒 | nmap | 專業掃描、OS 指紋識別 |
針對萬級 IP,建議採用 Golang + Worker Pool 或 Python asyncio 實現:
nmap XML 輸出做進一步服務識別⚠️ 授權前提:未經書面授權掃描他人資產可能違反《計算機犯罪法》或《網絡安全法》。請確保:
- 掃描目標在資產管理台帳內
- 具備資產擁有者簽署的掃描授權函
- 掃描流量不觸發 IDS/IPS 告警(協調網路團隊開白名單)
從簡單的 Shell 腳本到分散式掃描平台,核心邏輯始終是「並發控制 + 超時保護 + 結果聚合」。選對工具、守住合規,才能讓網路資產可視化成為常態化能力而非一次性救火動作。