diff --git a/check_tiktok.sh b/check_tiktok.sh deleted file mode 100644 index 9b75a2c..0000000 --- a/check_tiktok.sh +++ /dev/null @@ -1,304 +0,0 @@ -#!/bin/bash - -# ============================================================ -# TikTok 可访问性检测脚本 -# 适用系统: Debian / Ubuntu VPS -# 作者: Claude -# ============================================================ - -# 颜色定义 -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -CYAN='\033[0;36m' -BOLD='\033[1m' -NC='\033[0m' # No Color - -# 超时时间(秒) -TIMEOUT=10 - -# 检测目标列表 -declare -A TARGETS=( - ["TikTok 主站"]="www.tiktok.com" - ["TikTok API"]="api.tiktok.com" - ["TikTok 直播"]="live.tiktok.com" - ["TikTok 静态资源"]="sf16-website-login.neutral.ttwstatic.com" - ["TikTok CDN"]="p16-sign-va.tiktokcdn.com" -) - -# HTTP 检测目标 -declare -A HTTP_TARGETS=( - ["TikTok 主站 HTTPS"]="https://www.tiktok.com" - ["TikTok m站"]="https://m.tiktok.com" -) - -# ============================================================ -# 工具函数 -# ============================================================ - -print_banner() { - echo "" - echo -e "${CYAN}${BOLD}╔══════════════════════════════════════════════╗${NC}" - echo -e "${CYAN}${BOLD}║ TikTok 可访问性检测脚本 v1.0 ║${NC}" - echo -e "${CYAN}${BOLD}╚══════════════════════════════════════════════╝${NC}" - echo "" -} - -print_section() { - echo "" - echo -e "${BOLD}─── $1 ───────────────────────────────────${NC}" -} - -check_command() { - command -v "$1" &>/dev/null -} - -install_tool() { - local tool=$1 - echo -e "${YELLOW}[!] 正在安装 $tool ...${NC}" - apt-get install -y "$tool" -qq &>/dev/null - if check_command "$tool"; then - echo -e "${GREEN}[✓] $tool 安装成功${NC}" - else - echo -e "${RED}[✗] $tool 安装失败,请手动安装${NC}" - fi -} - -check_dependencies() { - print_section "环境检查" - local missing=() - - for cmd in curl ping dig; do - if check_command "$cmd"; then - echo -e " ${GREEN}✓${NC} $cmd 已安装" - else - echo -e " ${RED}✗${NC} $cmd 未安装" - missing+=("$cmd") - fi - done - - if [ ${#missing[@]} -gt 0 ]; then - echo "" - echo -e "${YELLOW}[!] 检测到缺少工具,尝试自动安装...${NC}" - if [ "$EUID" -ne 0 ]; then - echo -e "${RED}[✗] 需要 root 权限安装依赖,请使用 sudo 运行此脚本${NC}" - exit 1 - fi - apt-get update -qq &>/dev/null - for tool in "${missing[@]}"; do - case "$tool" in - dig) install_tool "dnsutils" ;; - *) install_tool "$tool" ;; - esac - done - fi -} - -# ============================================================ -# 检测函数 -# ============================================================ - -check_dns() { - print_section "DNS 解析检测" - local pass=0 - local fail=0 - - for name in "${!TARGETS[@]}"; do - local domain="${TARGETS[$name]}" - local result - result=$(dig +short "$domain" 2>/dev/null | head -1) - - if [ -n "$result" ]; then - echo -e " ${GREEN}✓${NC} ${name} (${domain})" - echo -e " 解析 IP: ${CYAN}${result}${NC}" - ((pass++)) - else - echo -e " ${RED}✗${NC} ${name} (${domain})" - echo -e " ${RED}DNS 解析失败${NC}" - ((fail++)) - fi - done - - echo "" - echo -e " DNS 检测结果: ${GREEN}${pass} 成功${NC} / ${RED}${fail} 失败${NC}" - return $fail -} - -check_ping() { - print_section "PING 连通性检测" - local pass=0 - local fail=0 - - for name in "${!TARGETS[@]}"; do - local domain="${TARGETS[$name]}" - local result - result=$(ping -c 3 -W "$TIMEOUT" "$domain" 2>/dev/null | tail -1) - - if echo "$result" | grep -qE "min/avg/max"; then - local avg - avg=$(echo "$result" | awk -F'/' '{print $5}') - echo -e " ${GREEN}✓${NC} ${name}" - echo -e " 平均延迟: ${CYAN}${avg} ms${NC}" - ((pass++)) - else - echo -e " ${RED}✗${NC} ${name} (${domain}) — ${RED}PING 超时或不可达${NC}" - ((fail++)) - fi - done - - echo "" - echo -e " PING 检测结果: ${GREEN}${pass} 成功${NC} / ${RED}${fail} 失败${NC}" - return $fail -} - -check_http() { - print_section "HTTP/HTTPS 访问检测" - local pass=0 - local fail=0 - - for name in "${!HTTP_TARGETS[@]}"; do - local url="${HTTP_TARGETS[$name]}" - local http_code - local time_total - - http_code=$(curl -o /dev/null -s -w "%{http_code}" \ - --max-time "$TIMEOUT" \ - --connect-timeout 5 \ - -L \ - -A "Mozilla/5.0 (Linux x86_64) AppleWebKit/537.36" \ - "$url" 2>/dev/null) - - time_total=$(curl -o /dev/null -s -w "%{time_total}" \ - --max-time "$TIMEOUT" \ - --connect-timeout 5 \ - -L \ - -A "Mozilla/5.0 (Linux x86_64) AppleWebKit/537.36" \ - "$url" 2>/dev/null) - - if [[ "$http_code" =~ ^(200|301|302|303|307|308)$ ]]; then - echo -e " ${GREEN}✓${NC} ${name}" - echo -e " HTTP 状态码: ${CYAN}${http_code}${NC} 响应时间: ${CYAN}${time_total}s${NC}" - ((pass++)) - elif [[ "$http_code" == "000" ]]; then - echo -e " ${RED}✗${NC} ${name}" - echo -e " ${RED}连接失败 (超时或被拦截)${NC}" - ((fail++)) - else - echo -e " ${YELLOW}~${NC} ${name}" - echo -e " HTTP 状态码: ${YELLOW}${http_code}${NC} (可能受限)" - ((fail++)) - fi - done - - echo "" - echo -e " HTTP 检测结果: ${GREEN}${pass} 成功${NC} / ${RED}${fail} 失败${NC}" - return $fail -} - -check_tcp_port() { - print_section "TCP 端口检测 (443/HTTPS)" - local pass=0 - local fail=0 - - for name in "${!TARGETS[@]}"; do - local domain="${TARGETS[$name]}" - if timeout "$TIMEOUT" bash -c "echo >/dev/tcp/${domain}/443" 2>/dev/null; then - echo -e " ${GREEN}✓${NC} ${name}:443 — ${GREEN}端口开放${NC}" - ((pass++)) - else - echo -e " ${RED}✗${NC} ${name}:443 — ${RED}端口不可达${NC}" - ((fail++)) - fi - done - - echo "" - echo -e " TCP 检测结果: ${GREEN}${pass} 成功${NC} / ${RED}${fail} 失败${NC}" - return $fail -} - -check_ip_info() { - print_section "本机出口 IP 信息" - local ip - ip=$(curl -s --max-time 5 https://api.ipify.org 2>/dev/null) - - if [ -n "$ip" ]; then - echo -e " 出口 IP: ${CYAN}${BOLD}${ip}${NC}" - - local geo - geo=$(curl -s --max-time 5 "https://ipapi.co/${ip}/json/" 2>/dev/null) - - if [ -n "$geo" ]; then - local country city org - country=$(echo "$geo" | grep -o '"country_name": *"[^"]*"' | cut -d'"' -f4) - city=$(echo "$geo" | grep -o '"city": *"[^"]*"' | cut -d'"' -f4) - org=$(echo "$geo" | grep -o '"org": *"[^"]*"' | cut -d'"' -f4) - echo -e " 归属地: ${CYAN}${country} ${city}${NC}" - echo -e " 运营商: ${CYAN}${org}${NC}" - - # TikTok 封锁国家提示 - local blocked_countries=("CN" "IR" "IN") - local country_code - country_code=$(echo "$geo" | grep -o '"country_code": *"[^"]*"' | cut -d'"' -f4) - for bc in "${blocked_countries[@]}"; do - if [ "$country_code" == "$bc" ]; then - echo "" - echo -e " ${RED}⚠ 警告: 当前 IP 归属地 (${country}) 可能受 TikTok 地区限制${NC}" - fi - done - fi - else - echo -e " ${RED}✗ 无法获取出口 IP${NC}" - fi -} - -print_summary() { - local dns_fail=$1 - local ping_fail=$2 - local http_fail=$3 - local tcp_fail=$4 - - print_section "综合判断" - - local total_fail=$((dns_fail + http_fail + tcp_fail)) - - if [ "$total_fail" -eq 0 ]; then - echo -e " ${GREEN}${BOLD}✅ TikTok 可正常访问!${NC}" - echo -e " DNS 解析、HTTP 请求、TCP 端口均通过检测。" - elif [ "$http_fail" -eq 0 ] && [ "$dns_fail" -eq 0 ]; then - echo -e " ${GREEN}${BOLD}✅ TikTok 基本可访问${NC}" - echo -e " HTTP/DNS 检测通过,部分节点可能有延迟。" - elif [ "$dns_fail" -gt 0 ] && [ "$http_fail" -gt 0 ]; then - echo -e " ${RED}${BOLD}❌ TikTok 无法访问${NC}" - echo -e " DNS 和 HTTP 均检测失败,IP 可能被封锁或地区受限。" - else - echo -e " ${YELLOW}${BOLD}⚠ TikTok 访问受限${NC}" - echo -e " 部分检测项失败,访问可能不稳定。" - fi - - echo "" - echo -e " 检测时间: $(date '+%Y-%m-%d %H:%M:%S %Z')" - echo "" - echo -e "${CYAN}${BOLD}══════════════════════════════════════════════════${NC}" - echo "" -} - -# ============================================================ -# 主流程 -# ============================================================ - -main() { - print_banner - check_dependencies - check_ip_info - check_dns - local dns_fail=$? - check_tcp_port - local tcp_fail=$? - check_http - local http_fail=$? - check_ping - local ping_fail=$? - print_summary "$dns_fail" "$ping_fail" "$http_fail" "$tcp_fail" -} - -main "$@"