#!/bin/bash # DMIT 内网互通自测(小白版):只需要一个参数——对方 DMIT 机器的公网 IP # 用法:bash dmit-internal-check.sh <对方IP> # 输出中文结论:延迟 / 路径是否走 DMIT 骨干(AS906)/ 可选测速 set -uo pipefail IP="${1:-}" if [ -z "$IP" ]; then echo "用法:bash dmit-internal-check.sh <对方 DMIT 机器的公网 IP>" exit 1 fi echo "======================================" echo " DMIT 内网互通自测 目标:$IP" echo "======================================" PING_AVG="" echo echo "① 延迟(5 个包)" PING_LINE=$(ping -c 5 -W 2 -q "$IP" 2>/dev/null | tail -1) if echo "$PING_LINE" | grep -q "rtt"; then echo " $PING_LINE" PING_AVG=$(echo "$PING_LINE" | sed -n 's/.*= [0-9.]*\/\([0-9.]*\)\/.*/\1/p') else echo " 对方不回 ping(可能禁 ICMP),这一步跳过,看第 ② 步" fi echo echo "② 路径(看有没有第三方运营商)" if [ "${FORCE_TRACEROUTE:-0}" != "1" ] && command -v nexttrace >/dev/null 2>&1; then OUT=$(nexttrace -4 -n -q 1 "$IP" 2>/dev/null | sed 's/\x1b\[[0-9;]*m//g') elif command -v traceroute >/dev/null 2>&1; then OUT=$(traceroute -T -p 443 -n -w 2 -q 1 -m 20 "$IP" 2>/dev/null) else echo " 这台机器没有 nexttrace/traceroute,跳过(可让管理员安装)" OUT="" fi if [ -n "$OUT" ]; then echo "$OUT" | head -12 echo " (中间跳全是 * 是正常的:DMIT 部分节点不返回 TTL,看第一跳和延迟即可)" echo DMIT=$(echo "$OUT" | grep -ciE "AS906|DMIT|193\.41\.[0-9]+\.|179\.25[0-9]\.|191\.222\.|154\.12\.|174\.136\.") THIRD=$(echo "$OUT" | grep -ciE "AS174|AS3356|AS2914|AS1299|AS3491|AS4134|AS4809|Cogent|NTT|Telia|PCCW|China Telecom") if [ -n "$PING_AVG" ]; then FAST=$(awk -v v="$PING_AVG" 'BEGIN{print (v < 2) ? 1 : 0}') else FAST="" fi if [ "$DMIT" -ge 2 ] && [ "$THIRD" -eq 0 ]; then echo "结论:✅ 走的是 DMIT 自家骨干(内网互通),没有第三方运营商中转。" elif [ "$THIRD" -gt 0 ]; then echo "结论:⚠ 路径里出现了第三方运营商,可能绕行公网(不一定是 DMIT 内网)。" elif [ "$FAST" = "1" ]; then echo "结论:✅ 几乎肯定是同城内网(延迟 ${PING_AVG} ms,路径被隐藏不影响判断)。" elif [ -n "$PING_AVG" ] && awk -v v="$PING_AVG" 'BEGIN{exit !(v > 100)}'; then echo "结论:⚠ 路径被隐藏,延迟 ${PING_AVG} ms(偏高):可能是跨区,建议对比同城/跨区典型值。" else echo "结论:无法确定,把上面路径和延迟发给管理员看。" fi fi echo echo "③ 测速(可选,需要对方先运行 iperf3 -s -p 5201)" if command -v iperf3 >/dev/null 2>&1; then if timeout 3 bash -c "echo > /dev/tcp/$IP/5201" 2>/dev/null; then echo " 对方 5201 端口开着,开始测速(2 条流 × 50M × 3 秒,会产生约 40MB 流量)..." iperf3 -c "$IP" -p 5201 -P 2 -b 50M -t 3 -f m 2>/dev/null | grep "\[SUM\]" | tail -2 else echo " 对方 5201 没开,跳过测速(不测也没关系,①② 已经能判断)" fi else echo " 本机没装 iperf3,跳过测速" fi echo echo "======================================" echo " 说明:内网互通不需要开启或配置,两台 DMIT 互访自动走内网;" echo " 但走内网仍然计入套餐流量,别拿它刷大文件。" echo "======================================"