前言
在拿到一台新的 VPS 后,我们通常习惯跑各种脚本(如 LemonBench, YABS 等)来测试性能。但很多脚本运行时间过长,且依赖 Python 或其他组件。
为了满足日常快速巡检的需求,我整理了一个纯 Bash 编写的轻量级 VPS 探针脚本 (v8.5)。它不仅能看系统基本信息,还能检测流媒体解锁(ChatGPT/Netflix/Disney+)、IP 纯净度以及三网回程路由类型。
特别针对 IPv6 网络进行了优化,修复了江苏移动等节点在部分 VPS 上测速不准的问题。
功能亮点
⚡ 极速运行:纯 Shell 脚本,无复杂依赖,秒级输出。
🖥 系统概览:包含 OS 版本、内核、BBR 状态(支持识别 XanMod/BBRv3)、Swap 使用率。
🌍 IP 质量检测:
识别 IP 类型(家庭宽带/数据中心/代理)。
检测 IPv4/IPv6 双栈连通性。
🔓 服务解锁检测:覆盖主流服务(ChatGPT, Gemini, Claude, YouTube, Netflix, Disney+, Telegram)。
📶 网络延迟 (Ping):
IPv4 国内三网(电信/联通/移动)延迟。
IPv6 特别优化:智能切换备选节点,解决江苏移动/电信 IPv6 测速痛点。
🛣 路由智能判断:自动识别回程线路类型(CN2 GIA/GT, 联通 9929, 移动 CMI 等)。
安装与使用
1. 依赖检查
虽然脚本是纯 Bash,但为了功能正常,建议确保系统安装了 curl 和 traceroute:
Bash
# Debian/Ubuntu
apt-get update && apt-get install -y curl traceroute
# CentOS/Almalinux
yum install -y curl traceroute
2. 一键部署
复制以下命令并在 VPS 的终端(root 用户)中执行,即可将脚本安装至系统命令:
Bash
cat << 'EOF' > /usr/local/bin/vps
#!/bin/bash
# VPS 探针 - v8.5 (全功能修正版) === 输入 vps 运行===
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
SKYBLUE='\033[0;36m'
PLAIN='\033[0m'
PURPLE='\033[0;35m'
BLUE='\033[0;34m'
[[ $EUID -ne 0 ]] && echo -e "${RED}错误: 请使用 root 权限运行${PLAIN}" && exit 1
clear
echo -e "${SKYBLUE}==============================================${PLAIN}"
echo -e "${SKYBLUE} VPS 探针 (v8.5 终极版) ==== 输入 vps 运行 ${PLAIN}"
echo -e "${SKYBLUE}==============================================${PLAIN}"
# --- 1. 基础系统信息 (完整版) ---
hostname=$(hostname)
os=$(grep -oP '(?<=^PRETTY_NAME=).+' /etc/os-release | tr -d '"')
kernel=$(uname -r)
mem=$(free -m | awk '/Mem:/ {print $3 "/" $2 " MB"}')
disk=$(df -h / | awk 'NR==2 {print $3 "/" $2}')
# Swap 状态
swap_total=$(free -m | awk '/Swap:/ {print $2}')
if [ "$swap_total" -gt 0 ]; then
swap_used=$(free -m | awk '/Swap:/ {print $3}')
swap_status="${GREEN}开启${PLAIN} (${swap_used}/${swap_total} MB)"
else
swap_status="${RED}未开启${PLAIN}"
fi
# BBR 详细版本识别
tcp_cc=$(sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null)
if [[ "$tcp_cc" == *"bbr"* ]]; then
if [[ "$kernel" == *"xanmod"* ]]; then
bbr_ver="BBRv3 (XanMod)"
elif [[ $(modinfo tcp_bbr 2>/dev/null) == *"version: 3"* ]]; then
bbr_ver="BBRv3"
else
bbr_ver="BBR 标准版"
fi
bbr_status="${GREEN}已开启${PLAIN} ${SKYBLUE}(${bbr_ver})${PLAIN}"
else
bbr_status="${RED}未开启${PLAIN} ${YELLOW}(当前: $tcp_cc)${PLAIN}"
fi
echo -e "${YELLOW}[系统概览]${PLAIN}"
echo -e "系统: $os"
echo -e "配置: 内存 $mem | 硬盘 $disk"
echo -e "Swap: $swap_status | BBR: $bbr_status"
# --- 2. IP 质量与纯净度 (完整逻辑) ---
echo -e "\n${YELLOW}[IP 质量分析]${PLAIN}"
ip_info=$(curl -s --connect-timeout 5 http://ip-api.com/json?fields=query,isp,country,mobile,proxy,hosting)
ip=$(echo "$ip_info" | grep -o '"query":"[^"]*"' | cut -d'"' -f4)
isp=$(echo "$ip_info" | grep -o '"isp":"[^"]*"' | cut -d'"' -f4)
country=$(echo "$ip_info" | grep -o '"country":"[^"]*"' | cut -d'"' -f4)
# 纯净度逻辑
is_hosting=$(echo "$ip_info" | grep '"hosting":true')
is_proxy=$(echo "$ip_info" | grep '"proxy":true')
if [ -n "$is_proxy" ]; then
color_risk="${RED}"
type_text="代理/VPN (Proxy)"
risk_text="极高"
elif [ -n "$is_hosting" ]; then
color_risk="${YELLOW}"
type_text="数据中心 (Hosting)"
risk_text="中 (常见)"
else
color_risk="${GREEN}"
type_text="家庭宽带/移动"
risk_text="低 (优质)"
fi
# IPv6 多源检测
ipv6=$(curl -6 -s --max-time 3 ipv6.ip.sb)
if [[ -z "$ipv6" ]]; then ipv6=$(curl -6 -s --max-time 3 ipv6.icanhazip.com); fi
if [[ -z "$ipv6" ]]; then ipv6=$(curl -6 -s --max-time 3 api6.ipify.org); fi
if [ -n "$ipv6" ]; then ipv6_disp="${GREEN}$ipv6${PLAIN}"; else ipv6_disp="${RED}未检测到${PLAIN}"; fi
echo -e "IPv4: $ip ($isp - $country)"
echo -e "IPv6: $ipv6_disp"
echo -e "类型: ${color_risk}${type_text}${PLAIN} | 风险: ${color_risk}${risk_text}${PLAIN}"
# --- 3. 全面服务解锁检测 (8项) ---
echo -e "\n${YELLOW}[服务解锁检测]${PLAIN}"
UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
check_unlock() {
url="$1"; name="$2"; expect="$3"
code=$(curl -sL -m 5 -o /dev/null -w "%{http_code}" -A "$UA" "$url")
if [[ "$code" == "$expect" || "$code" == "302" ]]; then
echo -e "$name: ${GREEN}已解锁${PLAIN}"
else
echo -e "$name: ${RED}未解锁${PLAIN}"
fi
}
check_unlock "https://chatgpt.com/" "ChatGPT " "200"
check_unlock "https://gemini.google.com/app" "Gemini " "200"
check_unlock "https://claude.ai/login" "Claude " "200"
check_unlock "https://www.youtube.com/" "YouTube " "200"
check_unlock "https://www.tiktok.com/" "TikTok " "200"
check_unlock "https://www.netflix.com/title/80018499" "Netflix " "200"
check_unlock "https://www.disneyplus.com/" "Disney+ " "200"
if nc -z -w 2 149.154.167.50 443 2>/dev/null; then
echo -e "Telegram: ${GREEN}已解锁${PLAIN}"
else
echo -e "Telegram: ${RED}被阻断${PLAIN}"
fi
# --- 4. 延迟测试 (智能 IPV6 修复版) ---
echo -e "\n${YELLOW}[网络延迟 (Ping)]${PLAIN}"
# 智能 Ping 函数:主 IP 不通自动切备选
ping_smart() {
name=$1; target1=$2; target2=$3
res=$(ping6 -c 4 -w 4 $target1 2>/dev/null | grep "min/avg")
if [ -z "$res" ] && [ -n "$target2" ]; then
res=$(ping6 -c 4 -w 4 $target2 2>/dev/null | grep "min/avg")
if [ -n "$res" ]; then name="$name (备线)"; fi
fi
if [ -n "$res" ]; then
delay=$(echo "$res" | awk -F '/' '{print $5}')
echo -e "$name: ${GREEN}${delay} ms${PLAIN}"
else
echo -e "$name: ${RED}超时${PLAIN}"
fi
}
# IPv4 测试
ping_v4() {
res=$(ping -c 4 -w 4 $1 2>/dev/null | grep "min/avg")
if [ -n "$res" ]; then
delay=$(echo "$res" | awk -F '/' '{print $5}')
echo -e "$2: ${GREEN}${delay} ms${PLAIN}"
else
echo -e "$2: ${RED}超时${PLAIN}"
fi
}
echo "--- IPv4 (国内三网) ---"
ping_v4 "113.108.81.36" "电信 (IPv4)"
ping_v4 "210.21.196.6" "联通 (IPv4)"
ping_v4 "221.131.143.69" "移动 (IPv4)"
if [ -n "$ipv6" ]; then
echo -e "\n--- IPv6 (江苏优化版) ---"
# 电信: 南京电信 / 骨干备选
ping_smart "江苏电信 (IPv6)" "240e:1f:1::1" "240e:1f:1::33"
# 联通: 公共DNS (稳) / 南京联通
ping_smart "江苏联通 (IPv6)" "2408:8888::8" "2408:8028::8"
# 移动: 修复版南京节点 / 备选
ping_smart "江苏移动 (IPv6)" "2409:8020:2000::6" "2409:8020:2000::8"
else
echo -e "\n${RED}未检测到 IPv6 连接,跳过 IPv6 延迟测试${PLAIN}"
fi
# --- 5. 路由线路智能判断 (完整保留) ---
echo -e "\n${YELLOW}[路由线路智能判断 (IPv4)]${PLAIN}"
run_trace() {
trace=$(traceroute -I -q 1 -n -m 30 $1 | grep -v "* * *")
if [ "$3" == "CT" ]; then
if echo "$trace" | grep -q "59.43"; then type="${PURPLE}CN2 GIA/GT${PLAIN}"; else type="${YELLOW}163 骨干${PLAIN}"; fi
elif [ "$3" == "CU" ]; then
if echo "$trace" | grep -qE "9929|100.100"; then type="${PURPLE}9929 精品${PLAIN}"; else type="${YELLOW}4837 骨干${PLAIN}"; fi
elif [ "$3" == "CM" ]; then
if echo "$trace" | grep -qE "221.183|221.176"; then type="${YELLOW}CMI 直连${PLAIN}"; else type="${PLAIN}常规线路${PLAIN}"; fi
fi
echo -e "$2 回程: $type"
}
run_trace "113.108.81.36" "电信" "CT"
run_trace "210.21.196.6" "联通" "CU"
run_trace "120.196.165.24" "移动" "CM"
echo -e "\n${GREEN}测试完成。${PLAIN}"
EOF
chmod +x /usr/local/bin/vps
3. 如何使用
在终端直接输入以下命令即可:
Bash
vps
效果演示
运行脚本后,你会看到类似如下的输出(界面色彩已适配深色终端):
Plaintext
==============================================
VPS 探针 (v8.5 终极版) ==== 输入 vps 运行
==============================================
[系统概览]
系统: Debian GNU/Linux 11 (bullseye)
配置: 内存 512/980 MB | 硬盘 2.5G/20G
Swap: 开启 (0/1024 MB) | BBR: 已开启 (BBRv3)
[IP 质量分析]
IPv4: 1.2.3.4 (DigitalOcean - USA)
IPv6: 2400:xxxx:xxxx...
类型: 数据中心 (Hosting) | 风险: 中 (常见)
[服务解锁检测]
ChatGPT : 已解锁
Gemini : 已解锁
Netflix : 未解锁
...
[网络延迟 (Ping)]
--- IPv4 (国内三网) ---
电信 (IPv4): 150.23 ms
联通 (IPv4): 145.12 ms
移动 (IPv4): 160.01 ms
--- IPv6 (江苏优化版) ---
江苏电信 (IPv6): 148.20 ms
江苏联通 (IPv6): 142.55 ms
江苏移动 (IPv6): 155.30 ms
[路由线路智能判断 (IPv4)]
电信 回程: CN2 GIA/GT
联通 回程: 4837 骨干
移动 回程: CMI 直连
测试完成。
实际应用截图

技术原理简述
流媒体检测:通过
curl模拟浏览器 UA 请求各服务的目标 URL,根据返回的 HTTP 状态码(200/302 vs 403/404)来判断 IP 是否被墙或被限制。路由识别:利用
traceroute追踪回程路由,匹配特定骨干网 IP 段(如59.43代表 CN2,9929代表联通 A 网)来判断线路等级。智能 Ping:代码中内置了备选 IP 逻辑,如果主测试 IP 不通(常见于部分节点屏蔽 ICMP),会自动切换到同运营商的备用 IP,确保测试结果的准确性。
免责声明:本脚本仅供技术交流与服务器性能测试使用,请勿用于非法用途。请自行评估脚本运行风险。