#!/bin/bash

# --- 配置区域 ---
LOG_FILE="atlas-check_ip.log"

# 你的 IP 列表 (这里我放回了你图片里的内网IP供测试，你可以换回公网IP)
HOSTS=(
#    "10.3.50.101"
#    "10.3.50.102"
#    "10.3.50.103"
    "10.3.4.2"
    "10.3.4.3"
    "10.3.4.4"
    "10.3.4.5"
#    "10.3.4.13"
#    "10.3.4.14"
#    "10.3.4.16"
)
# ----------------

# 定义一个函数来同时处理屏幕打印和日志写入
# 参数1: IP地址
# 参数2: 状态文本(不带颜色)
# 参数3: 颜色代码 (例如 \033[32m)
log_result() {
    local ip="$1"
    local status_text="$2"
    local color_code="$3"
    local reset_code="\033[0m"
    local current_time=$(date "+%Y-%m-%d %H:%M:%S")

    # 1. 输出到屏幕 (带颜色，使用 printf %-15s 保证IP列对齐)
    # %-15s 表示：左对齐，占用15个字符宽度
    printf "%s : %-15s : %b%s%b\n" "$current_time" "$ip" "$color_code" "$status_text" "$reset_code"

    # 2. 写入到文件 (不带颜色，保持纯净文本)
    printf "%s : %-15s : %s\n" "$current_time" "$ip" "$status_text" >> "$LOG_FILE"
}

# --- 开始执行 ---

# 初始化日志文件（打印开始线）
echo "===============================================" | tee -a "$LOG_FILE"
echo "开始检测 SSH (端口 22) - $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$LOG_FILE"
echo "-----------------------------------------------" | tee -a "$LOG_FILE"

# 打印表头 (让输出看起来更专业)
# 屏幕打印
printf "%-19s : %-15s : %s\n" "时间 (Time)" "IP 地址" "状态 (Status)"
# 日志写入
printf "%-19s : %-15s : %s\n" "时间 (Time)" "IP 地址" "状态 (Status)" >> "$LOG_FILE"
echo "-----------------------------------------------" >> "$LOG_FILE"

for IP in "${HOSTS[@]}"; do
    # -w 2: 超时时间设置为 2 秒，加快检测速度
    nc -z -w 2 "$IP" 22 &> /dev/null
    
    if [ $? -eq 0 ]; then
        # 绿色: \033[32m
        log_result "$IP" "通 (Open)" "\033[32m"
    else
        # 红色: \033[31m
        log_result "$IP" "不通 (Closed)" "\033[31m"
    fi
done

echo "-----------------------------------------------" | tee -a "$LOG_FILE"
echo "检测完成，日志已保存至 $LOG_FILE"
