Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 批量並行 Telnet 埠口掃描:Shell 腳本實戰與效能優化

編輯:Linux 系統常見問題解答

前言:為什麼需要並行掃描?

在大規模網路環境中,逐一檢測數百台主機的特定埠口(如 SSH 22、HTTP 80、資料庫 3306)若採用串列方式,耗時極長。本文提供一個基於 telnet 與 Shell 背景任務的並行掃描方案,並進階優化為 nc/timeout 組合,大幅縮短掃描窗口。

一、基礎版:Telnet 並行掃描腳本

1.1 環境準備

mkdir -p ~/shell/telnet_port
cd ~/shell/telnet_port

1.2 目標 IP 清單

# 快速生成測試 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
# ...

1.3 核心腳本 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"

1.4 執行與結果

chmod +x telnet_port.sh
./telnet_port.sh 22 ip.list &  # 後台執行

# 輸出範例
掃描完成:
  存活: 4
  失聯: 2
詳細結果見 telnet_result.txt

二、進階優化版:nc + timeout 高效能方案

telnet 交互式協議開銷大、無法精確控制超時。生產環境建議改用 nc (netcat) 或 bash 內建 /dev/tcp:

2.1 使用 nc(支援 UDP/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

2.2 純 Bash 無外部相依(最快)

#!/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 實現:

  • 控制並發數(如 500 協程)避免耗盡檔案描述符
  • 支援 CIDR 範圍、排除清單、結果推送至 Kafka/ES
  • 整合 nmap XML 輸出做進一步服務識別

五、安全合規提醒

⚠️ 授權前提:未經書面授權掃描他人資產可能違反《計算機犯罪法》或《網絡安全法》。請確保:

  • 掃描目標在資產管理台帳內
  • 具備資產擁有者簽署的掃描授權函
  • 掃描流量不觸發 IDS/IPS 告警(協調網路團隊開白名單)

從簡單的 Shell 腳本到分散式掃描平台,核心邏輯始終是「並發控制 + 超時保護 + 結果聚合」。選對工具、守住合規,才能讓網路資產可視化成為常態化能力而非一次性救火動作。

Copyright © Windows教程網 All Rights Reserved