#!/bin/bash
# =======================================================
# 核心技术维度自动化审计脚本
# 涵盖: 虚拟化、硬件真实配置、网络路由、IO 性能、安全限制
# =======================================================
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}======================================================${NC}"
echo -e "${GREEN} VPS 核心技术维度自动化审计 ${NC}"
echo -e "${GREEN}======================================================${NC}"
# 确保安装必要依赖
echo -e "${YELLOW}[*] 正在检查并安装基础依赖 (curl, mtr, jq, fio)...${NC}"
if [ -f /etc/debian_version ]; then
apt-get update -qq >/dev/null 2>&1
apt-get install -y -qq curl mtr-tiny jq fio >/dev/null 2>&1
elif [ -f /etc/redhat-release ]; then
yum install -y -q epel-release >/dev/null 2>&1
yum install -y -q curl mtr jq fio >/dev/null 2>&1
fi
echo -e "\n${YELLOW}>>> 1. 硬件与底层基础 (Hardware & Architecture)${NC}"
# 11. 虚拟化技术
if command -v systemd-detect-virt >/dev/null 2>&1; then
virt=$(systemd-detect-virt)
else
virt=$(hostnamectl | grep "Virtualization" | awk '{print $2}')
fi
echo -e "虚拟化架构: ${GREEN}${virt:-Unknown}${NC}"
# 12 & 13. CPU 真实型号与核心
cpu_model=$(awk -F': ' '/model name/{print $2; exit}' /proc/cpuinfo)
cpu_cores=$(nproc)
cpu_freq=$(awk -F': ' '/cpu MHz/{print $2; exit}' /proc/cpuinfo)
echo -e "CPU 型号: ${GREEN}$cpu_model${NC}"
echo -e "CPU 核心与频率: ${GREEN}$cpu_cores Cores @ ${cpu_freq}MHz${NC}"
# 16. 内存与 Swap
ram_total=$(free -m | awk '/Mem:/{print $2}')
swap_total=$(free -m | awk '/Swap:/{print $2}')
echo -e "物理内存: ${GREEN}${ram_total} MB${NC} | Swap 容量: ${GREEN}${swap_total} MB${NC}"
# 14 & 21. 磁盘基础 IO 测试 (4K 随机写 - 简易版)
echo -e "\n${YELLOW}>>> 2. 性能限制与资源分配 (Performance)${NC}"
echo "正在进行 4K 随机写入 IOPS 测试 (需等待约10秒)..."
fio_res=$(fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --direct=1 --size=100M --numjobs=1 --runtime=10 --group_reporting 2>/dev/null | grep "IOPS")
if [ -n "$fio_res" ]; then
iops=$(echo "$fio_res" | awk -F'IOPS=' '{print $2}' | awk -F',' '{print $1}')
echo -e "磁盘随机写入 IOPS: ${GREEN}$iops${NC}"
else
echo -e "${RED}磁盘 IO 测试跳过或失败${NC}"
fi
# 19. CPU Steal 监控 (超售容忍度探针)
steal_time=$(vmstat 1 2 | tail -1 | awk '{print $17}')
echo -e "当前 CPU Steal Time (超售指标): ${GREEN}${steal_time}%${NC} (若长期>5%则存在严重超售)"
echo -e "\n${YELLOW}>>> 3. 网络质量与路由架构 (Network & Routing)${NC}"
# 5 & 10. ASN 与上游 IP 信息
ipv4_info=$(curl -s https://ipinfo.io/json)
ip=$(echo "$ipv4_info" | jq -r '.ip')
org=$(echo "$ipv4_info" | jq -r '.org')
country=$(echo "$ipv4_info" | jq -r '.country')
echo -e "公网 IPv4: ${GREEN}$ip${NC}"
echo -e "地理位置与 ASN: ${GREEN}$country | $org${NC}"
# 6. IPv6 支持度
ipv6_check=$(curl -s -6 -m 3 https://api64.ipify.org)
if [ -n "$ipv6_check" ]; then
echo -e "原生 IPv6 支持: ${GREEN}已启用 ($ipv6_check)${NC}"
else
echo -e "原生 IPv6 支持: ${RED}未分配或未路由${NC}"
fi
# 1 & 2. 简易路由探测 (测试到中国电信和 Cloudflare 的跳数)
echo "正在探测路由连通性 (Trace)..."
mtr_ct=$(mtr -c 1 -r -w 202.97.50.54 2>/dev/null | tail -n 1 | awk '{print $2}')
echo -e "至中国电信骨干网跳数估算: ${GREEN}${mtr_ct:-Timeout}${NC}"
echo -e "\n${YELLOW}>>> 4. 防御与安全能力 (Security)${NC}"
# 37. 防爆破与 SSH 策略
ssh_pwd_auth=$(sshd -T 2>/dev/null | grep "passwordauthentication")
echo -e "SSH 密码登录状态: ${GREEN}$ssh_pwd_auth${NC}"
root_login=$(sshd -T 2>/dev/null | grep "permitrootlogin")
echo -e "Root 直登策略: ${GREEN}$root_login${NC}"
# 34. 系统防火墙状态
if command -v ufw >/dev/null 2>&1; then
fw_status=$(ufw status | head -n 1)
echo -e "UFW 防火墙: ${GREEN}$fw_status${NC}"
elif command -v firewall-cmd >/dev/null 2>&1; then
fw_status=$(firewall-cmd --state 2>/dev/null)
echo -e "Firewalld 防火墙: ${GREEN}$fw_status${NC}"
else
echo -e "内部防火墙: ${RED}未检测到常规管理工具(ufw/firewalld)${NC}"
fi
echo -e "\n${GREEN}======================================================${NC}"
echo -e "测试完成。商业、售后及面板维度请对照控制台与 TOS 手动排查。"