Upload files to "/"
This commit is contained in:
parent
a8041d3491
commit
e5b9193d8f
|
|
@ -0,0 +1,165 @@
|
|||
#!/bin/bash
|
||||
|
||||
# ============================================================
|
||||
# TikTok 真实可访问性检测脚本 v1.0
|
||||
# 检测原理: 先通过美国 VPS DNS 解析 TikTok 域名,
|
||||
# 再用解析到的 IP 发起实际 HTTP 请求,
|
||||
# 模拟手机/设备的真实访问行为
|
||||
# ============================================================
|
||||
|
||||
Font_Red="\033[31m"
|
||||
Font_Green="\033[32m"
|
||||
Font_Yellow="\033[33m"
|
||||
Font_SkyBlue="\033[36m"
|
||||
Font_Suffix="\033[0m"
|
||||
Font_Bold="\033[1m"
|
||||
|
||||
# 美国 VPS DNS 服务器
|
||||
US_DNS="142.171.202.195"
|
||||
|
||||
UA_Browser="Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1"
|
||||
|
||||
print_banner() {
|
||||
echo ""
|
||||
echo -e "${Font_SkyBlue}${Font_Bold}╔══════════════════════════════════════════════╗${Font_Suffix}"
|
||||
echo -e "${Font_SkyBlue}${Font_Bold}║ TikTok 真实访问检测脚本 v1.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)
|
||||
local ip_mask
|
||||
ip_mask=$(awk -F"." '{print $1"."$2".*.*"}' <<<"${ip}")
|
||||
local isp
|
||||
isp=$(curl -s -4 --max-time 8 "https://api.ip.sb/geoip/${ip}" 2>/dev/null | grep '"organization"' | cut -f4 -d'"')
|
||||
echo -e " ${Font_SkyBlue}本机出口: ${isp:-未知} (${ip_mask})${Font_Suffix}"
|
||||
echo -e " ${Font_SkyBlue}使用 DNS: ${US_DNS} (美国 VPS)${Font_Suffix}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
check_dns_resolution() {
|
||||
echo -n -e " [1/3] DNS 解析测试..."
|
||||
local resolved_ip
|
||||
resolved_ip=$(dig +short @"$US_DNS" www.tiktok.com A 2>/dev/null | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1)
|
||||
|
||||
if [ -n "$resolved_ip" ]; then
|
||||
echo -e "\r [1/3] DNS 解析测试 ${Font_Green}✅ 成功${Font_Suffix} → ${Font_SkyBlue}${resolved_ip}${Font_Suffix}"
|
||||
echo "$resolved_ip"
|
||||
return 0
|
||||
else
|
||||
echo -e "\r [1/3] DNS 解析测试 ${Font_Red}❌ 失败(无法通过美国 DNS 解析)${Font_Suffix}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_tcp_connect() {
|
||||
local ip=$1
|
||||
echo -n -e " [2/3] TCP 连接测试..."
|
||||
if timeout 8 bash -c "echo >/dev/tcp/${ip}/443" 2>/dev/null; then
|
||||
echo -e "\r [2/3] TCP 连接测试 ${Font_Green}✅ 成功${Font_Suffix} → ${Font_SkyBlue}${ip}:443 可达${Font_Suffix}"
|
||||
return 0
|
||||
else
|
||||
echo -e "\r [2/3] TCP 连接测试 ${Font_Red}❌ 失败(${ip}:443 不可达)${Font_Suffix}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_http_access() {
|
||||
local ip=$1
|
||||
echo -n -e " [3/3] HTTP 访问测试..."
|
||||
|
||||
# 用解析到的 IP 直接请求,通过 Host 头指定域名(模拟设备真实访问)
|
||||
local result
|
||||
result=$(curl \
|
||||
--resolve "www.tiktok.com:443:${ip}" \
|
||||
--user-agent "${UA_Browser}" \
|
||||
-sL --max-time 15 \
|
||||
-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 region
|
||||
region=$(echo "$result" | grep -o '"region":"[^"]*"' | head -1 | cut -f4 -d'"')
|
||||
|
||||
if [ -n "$region" ]; then
|
||||
echo -e "\r [3/3] HTTP 访问测试 ${Font_Green}✅ 成功${Font_Suffix} → TikTok Region: ${Font_Green}【${region}】${Font_Suffix}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# 尝试不带 gzip
|
||||
local result2
|
||||
result2=$(curl \
|
||||
--resolve "www.tiktok.com:443:${ip}" \
|
||||
--user-agent "${UA_Browser}" \
|
||||
-s --max-time 15 \
|
||||
-H "Accept-Language: en-US,en;q=0.9" \
|
||||
"https://www.tiktok.com/" 2>/dev/null)
|
||||
|
||||
local region2
|
||||
region2=$(echo "$result2" | grep -o '"region":"[^"]*"' | head -1 | cut -f4 -d'"')
|
||||
|
||||
if [ -n "$region2" ]; then
|
||||
echo -e "\r [3/3] HTTP 访问测试 ${Font_Green}✅ 成功${Font_Suffix} → TikTok Region: ${Font_Green}【${region2}】${Font_Suffix}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local http_code
|
||||
http_code=$(curl \
|
||||
--resolve "www.tiktok.com:443:${ip}" \
|
||||
--user-agent "${UA_Browser}" \
|
||||
-s -o /dev/null -w "%{http_code}" \
|
||||
--max-time 10 \
|
||||
"https://www.tiktok.com/" 2>/dev/null)
|
||||
|
||||
if [[ "$http_code" =~ ^(200|301|302)$ ]]; then
|
||||
echo -e "\r [3/3] HTTP 访问测试 ${Font_Yellow}⚠️ 可连接${Font_Suffix}(HTTP ${http_code},未获取到 region,可能为 IDC IP)"
|
||||
return 0
|
||||
else
|
||||
echo -e "\r [3/3] HTTP 访问测试 ${Font_Red}❌ 失败${Font_Suffix}(HTTP ${http_code:-超时})"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
print_summary() {
|
||||
local result=$1
|
||||
echo ""
|
||||
if [ "$result" -eq 0 ]; then
|
||||
echo -e " ${Font_Green}${Font_Bold}══════════════════════════════════════════${Font_Suffix}"
|
||||
echo -e " ${Font_Green}${Font_Bold} ✅ 结论:设备通过此 DNS 可正常访问 TikTok${Font_Suffix}"
|
||||
echo -e " ${Font_Green}${Font_Bold}══════════════════════════════════════════${Font_Suffix}"
|
||||
else
|
||||
echo -e " ${Font_Red}${Font_Bold}══════════════════════════════════════════${Font_Suffix}"
|
||||
echo -e " ${Font_Red}${Font_Bold} ❌ 结论:设备通过此 DNS 无法访问 TikTok${Font_Suffix}"
|
||||
echo -e " ${Font_Red}${Font_Bold}══════════════════════════════════════════${Font_Suffix}"
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
|
||||
# ── 主流程 ──────────────────────────────────────
|
||||
print_banner
|
||||
get_ip_info
|
||||
|
||||
resolved_ip=$(check_dns_resolution)
|
||||
dns_ok=$?
|
||||
|
||||
if [ $dns_ok -ne 0 ]; then
|
||||
print_summary 1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
check_tcp_connect "$resolved_ip"
|
||||
tcp_ok=$?
|
||||
|
||||
if [ $tcp_ok -ne 0 ]; then
|
||||
print_summary 1
|
||||
exit 1
|
||||
fi
|
||||
|
||||
check_http_access "$resolved_ip"
|
||||
http_ok=$?
|
||||
|
||||
print_summary $http_ok
|
||||
Loading…
Reference in New Issue