check_hosts.sh#!/bin/bash
# 批量 Ping 掃描檢測主機存活
# 適用:C 類網段(/24)快速巡檢
# 作者:運維團隊 | 版本:1.1
NETWORK_PREFIX="192.168.1"
START=1
END=254
TIMEOUT=2 # 單次 Ping 超時(秒)
COUNT=2 # Ping 包數
LOG_FILE="/var/log/host_scan_$(date +%F).log"
echo "=== 開始掃描 ${NETWORK_PREFIX}.${START}-${END} $(date) ===" | tee -a "$LOG_FILE"
for n in $(seq $START $END); do
HOST="${NETWORK_PREFIX}.${n}"
# -c 包數 -W 超時 -q 安靜模式
if ping -c $COUNT -W $TIMEOUT -q "$HOST" &>/dev/null; then
STATUS="UP"
else
STATUS="DOWN"
fi
echo "$(date '+%F %T') $HOST $STATUS" | tee -a "$LOG_FILE"
done
echo "=== 掃描結束 $(date) ===" | tee -a "$LOG_FILE"
# 統計摘要
UP_COUNT=$(grep " UP$" "$LOG_FILE" | tail -n +2 | wc -l)
DOWN_COUNT=$(grep " DOWN$" "$LOG_FILE" | tail -n +2 | wc -l)
echo "存活: $UP_COUNT 不可達: $DOWN_COUNT" | tee -a "$LOG_FILE"
原版串行 Ping,254 台約需 10 分鐘。生產環境推薦 fping(EPEL 源可裝)或 GNU Parallel 並發:
# 安裝 fping
yum install -y epel-release && yum install -y fping
# 一條命令完成全網段並發掃描(默認 256 並發)
fping -a -g 192.168.1.0/24 2>/dev/null | sort -V > alive_hosts.txt
fping -u -g 192.168.1.0/24 2>/dev/null | sort -V > dead_hosts.txt
# 或使用 parallel + ping(控制並發數 50)
seq 1 254 | parallel -j 50 "ping -c 2 -W 1 192.168.1.{} &>/dev/null && echo 192.168.1.{} UP || echo 192.168.1.{} DOWN"
| 能力 | 工具/方案 | 說明 |
|---|---|---|
| 資產發現 | Nmap / Masscan / NetBox | 自動發現設備、端口、服務、系統指紋,建立 CMDB |
| 持續監控 | Zabbix / Prometheus + Blackbox Exporter | ICMP/TCP/HTTP 多協議探針,圖表告警、歷史趨勢 |
| 異常自愈 | Ansible + Alertmanager Webhook | 檢測到 DOWN 觸發 Playbook 嘗試重啟服務/發送工單 |
| 審計合規 | 日誌集中存儲(ELK/Loki)+ 定期報表 | 滿足等保/ISO27001 定期巡檢留證要求 |
簡單的 for 循環 + ping 適合臨時排查、小網段巡檢。規模超過 50 台或需持續監控時,**必須引入專業監控系統**(Zabbix/Prometheus),實現「發現-告警-處理-閉環」全流程自動化,避免人工腳本維護成本隨規模線性增長。