AC2100/tiktok_region_check.sh

109 lines
3.8 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================================
# TikTok 区域检测脚本 v2.0
# 检测原理: 请求 TikTok 主站,解析响应中的 "region" 字段
# 适用系统: Debian / Ubuntu VPS
# ============================================================
Font_Red="\033[31m"
Font_Green="\033[32m"
Font_Yellow="\033[33m"
Font_SkyBlue="\033[36m"
Font_Suffix="\033[0m"
Font_Bold="\033[1m"
UA_Browser="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
print_banner() {
echo ""
echo -e "${Font_SkyBlue}${Font_Bold}╔══════════════════════════════════════════════╗${Font_Suffix}"
echo -e "${Font_SkyBlue}${Font_Bold}║ TikTok 区域检测脚本 v2.0 ║${Font_Suffix}"
echo -e "${Font_SkyBlue}${Font_Bold}╚══════════════════════════════════════════════╝${Font_Suffix}"
echo -e " 测试时间: $(date)"
echo ""
}
get_ip_info() {
local ip
ip=$(curl -4 -s --max-time 8 https://api64.ipify.org 2>/dev/null)
if [ -z "$ip" ]; then
echo -e " ${Font_Red}无法获取出口 IP${Font_Suffix}"
echo ""
return
fi
local isp
isp=$(curl -s -4 --max-time 8 "https://api.ip.sb/geoip/${ip}" 2>/dev/null | grep '"organization"' | cut -f4 -d'"')
local ip_mask
ip_mask=$(awk -F"." '{print $1"."$2".*.*"}' <<<"${ip}")
echo -e " ${Font_SkyBlue}出口网络: ${isp:-未知} (${ip_mask})${Font_Suffix}"
echo ""
}
check_tiktok() {
echo -n -e " 正在检测 TikTok...\r"
# 第一次请求:不带 gzip直接获取原始响应
local result1
result1=$(curl --user-agent "${UA_Browser}" \
-s --max-time 10 \
-H "Accept-Language: en-US,en;q=0.9" \
"https://www.tiktok.com/" 2>/dev/null)
# 完全无法连接
if [ -z "$result1" ]; then
echo -e " TikTok Region:\t${Font_Red}❌ 连接失败(网络不通或 IP 被封)${Font_Suffix}"
return 1
fi
# 提取 region 字段
local region1
region1=$(echo "$result1" | grep -o '"region":"[^"]*"' | head -1 | cut -f4 -d'"')
if [ -n "$region1" ]; then
echo -e " TikTok Region:\t${Font_Green}✅ 【${region1}】 可正常访问${Font_Suffix}"
return 0
fi
# 第二次请求:带 gzip 压缩头,解压后再提取
local result2
result2=$(curl --user-agent "${UA_Browser}" \
-sL --max-time 10 \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
-H "Accept-Encoding: gzip" \
-H "Accept-Language: en-US,en;q=0.9" \
"https://www.tiktok.com" 2>/dev/null | gunzip 2>/dev/null)
local region2
region2=$(echo "$result2" | grep -o '"region":"[^"]*"' | head -1 | cut -f4 -d'"')
if [ -n "$region2" ]; then
echo -e " TikTok Region:\t${Font_Yellow}⚠️ 【${region2}】 可访问,但可能为 IDC IP部分功能受限${Font_Suffix}"
return 0
fi
# 判断是否被地区封锁
if echo "$result1" | grep -qi "not available\|unavailable\|blocked\|region restricted"; then
echo -e " TikTok Region:\t${Font_Red}❌ 该地区已被 TikTok 封锁${Font_Suffix}"
return 1
fi
echo -e " TikTok Region:\t${Font_Red}❌ 检测失败(无法解析区域信息)${Font_Suffix}"
return 1
}
print_footer() {
echo ""
echo -e "${Font_SkyBlue}${Font_Bold}══════════════════════════════════════════════════${Font_Suffix}"
echo ""
}
print_banner
get_ip_info
check_tiktok
print_footer