#!/bin/sh
# @desc: STUN 探测: 遍历 Google STUN 服务器测外网可达性
# @usage: wcl stun
#   不带参数, 直接跑; 需先 pip install pystun3
#   每次测试随机生成一个本地源端口(-p)并打印该端口
#   遍历: stun, stun1, stun2, stun3, stun4
# ============================================================
# 脚本名称: stun_test_loop.sh
# 功能描述: 
#   使用 pystun3 批量测试 Google STUN 服务器。
#   每次测试随机生成一个本地源端口 (-p)，并打印该端口。
#   遍历列表: stun, stun1, stun2, stun3, stun4
#
# 依赖: 需要系统已安装 pystun3 (pip install pystun3)
# ============================================================

# STUN 服务器列表
SERVERS="stun.l.google.com stun1.l.google.com stun2.l.google.com stun3.l.google.com stun4.l.google.com"

# 检查 pystun3 是否安装
if ! command -v pystun3 >/dev/null 2>&1; then
    echo "错误: 未找到 pystun3 命令。请先安装: pip install pystun3"
    exit 1
fi

echo ">> 开始批量 STUN 测试..."
echo "------------------------------------------------------------"

# 循环遍历服务器
for server in $SERVERS; do
    # 生成随机端口 (范围 10000 - 60000)
    # 使用 awk 生成以确保在不同 Linux 发行版(包括嵌入式)下的兼容性
    RAND_PORT=$(awk 'BEGIN{srand(); print int(rand()*(60000-10000)+10000)}')

    echo ""
    echo ">> [当前测试目标]: $server"
    echo ">> [随机本地端口]: $RAND_PORT"
    echo ">> 正在执行 pystun3..."
    
    # 执行测试
    # -H: 指定STUN服务器
    # -P: 指定STUN服务器端口 (默认19302)
    # -p: 指定本地源端口 (刚才生成的随机端口)
    pystun3 -H "$server" -P 19302 -p "$RAND_PORT"

    echo "------------------------------------------------------------"
    
    # 稍微暂停1秒，避免请求过快
    sleep 1
done

echo ">> 所有测试已完成。"