#!/usr/bin/env bash
# @desc: TCP 延迟测试(自动在 nping/nmap/hping3 之间选择)
# @usage: wcl tcping <IP或域名> <端口>
#   例: wcl tcping t.melulu.top 443
#   内部脚本名: tcp_latency_test.sh <ip_or_domain> <port>

# ==========================================
# TCP 延迟测试脚本
# 功能：
# 1. 自动安装 nping（nmap）和 hping3
# 2. 使用 TCP SYN 测试目标 IP/域名 + 端口 的 RTT
# 用法：
#   ./tcp_latency_test.sh <ip_or_domain> <port>
# 示例：
#   ./tcp_latency_test.sh 8.8.8.8 443
# ==========================================

set -e

# -------- 参数检查 --------
if [ $# -ne 2 ]; then
    echo "用法: $0 <IP或域名> <端口>"
    exit 1
fi

TARGET="$1"
PORT="$2"

# -------- root 权限检查 --------
if [ "$(id -u)" -ne 0 ]; then
    echo "错误：请使用 root 用户执行该脚本"
    exit 1
fi

# -------- 安装依赖 --------
install_if_missing() {
    local cmd="$1"
    local pkg="$2"

    if ! command -v "$cmd" >/dev/null 2>&1; then
        echo "[INFO] 未检测到 $cmd，开始安装 $pkg ..."
        apt update
        apt install -y "$pkg"
    else
        echo "[INFO] $cmd 已存在，跳过安装"
    fi
}

install_if_missing nping nmap
install_if_missing hping3 hping3

echo
echo "=========================================="
echo "  TCP 延迟测试"
echo "  目标: $TARGET"
echo "  端口: $PORT"
echo "=========================================="
echo

# -------- nping 测试 --------
echo "[1/2] 使用 nping 进行 TCP 延迟测试"
echo "------------------------------------------"
nping --tcp -p "$PORT" -c 5 "$TARGET"
echo

# -------- hping3 测试 --------
echo "[2/2] 使用 hping3 进行 TCP SYN RTT 测试"
echo "------------------------------------------"
hping3 -S -p "$PORT" -c 5 "$TARGET"
echo

echo "=========================================="
echo "测试完成"
echo "说明："
echo "- nping：统计 TCP 往返延迟（RTT）"
echo "- hping3：底层 TCP SYN → SYN-ACK RTT"
echo "=========================================="
