#!/bin/bash
# ============================================================
# 局域网 IP 扫描工具 (Ping Sweep)
# 功能：自动检测当前子网下的 IP 可用性
# 作者：Hermes Agent
# ============================================================

# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

echo "=================================================="
echo "       🚀 局域网 IP 扫描工具 (Ping Sweep)"
echo "=================================================="

# 1. 获取当前子网信息
MY_IP=$(ip route get 1 2>/dev/null | awk '{print $7; exit}')
if [ -z "$MY_IP" ]; then
    echo "❌ 错误：无法获取本机 IP 地址，请检查网络。"
    exit 1
fi

SUBNET=$(echo "$MY_IP" | cut -d. -f1-3)
echo "🎯 扫描目标: ${SUBNET}.0/24 网段"
echo "⏳ 正在扫描... (约需 5-10 秒)"
echo ""

# 临时结果文件
TMP_RES=$(mktemp)

# 2. 并行 Ping 扫描
# 使用并发后台任务加快速度，并使用 subshell 过滤结果以便排序
for i in {1..254}; do
    IP="${SUBNET}.${i}"
    (
        # Ping 1 次，超时 0.5 秒
        if ping -c 1 -W 0.5 "$IP" &>/dev/null; then
            echo "❌ [占用] ${IP}" >> "$TMP_RES"
        else
            echo "✅ [可用] ${IP}" >> "$TMP_RES"
        fi
    ) &
    
    # 限制最大并发数，防止网络风暴 (这里设为 20)
    if (( $i % 20 == 0 )); then
        wait
    fi
done

# 等待剩余任务
wait

echo ""
echo "=================================================="
echo "扫描完成！"
echo "=================================================="

# 3. 输出统计与列表
echo ""
echo "📊 统计总结:"
echo "   ✅ 可用 IP (未响应 Ping): $(grep '可用' "$TMP_RES" | wc -l) 个"
echo "   ❌ 占用 IP (响应 Ping):   $(grep '占用' "$TMP_RES" | wc -l) 个"
echo ""
echo "📋 结果列表 (按 IP 排序):"
echo "--------------------------------------------------"
sort -t. -k4 -n "$TMP_RES"
echo "--------------------------------------------------"

# 清理
rm -f "$TMP_RES"
