Files
GoProxy/test/test_proxy.sh
isboyjc f55209d8d3 feat: init
2026-03-29 03:31:59 +08:00

96 lines
2.8 KiB
Bash
Executable File
Raw 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
# GoProxy 持续测试脚本 - 类似 ping 命令的简洁输出
# 按 Ctrl+C 停止测试
# 用法: ./test_proxy.sh [端口号默认7777]
PROXY_HOST="127.0.0.1"
PROXY_PORT="${1:-7777}"
TEST_URL="http://ip-api.com/json/?fields=countryCode,query"
DELAY=1
# 统计变量
total=0
success=0
fail=0
# 获取毫秒时间戳(兼容 macOS 和 Linux
get_ms_time() {
python3 -c 'import time; print(int(time.time() * 1000))'
}
# 国家代码转 emoji 旗帜
country_to_emoji() {
local country_code="$1"
if [ -z "$country_code" ] || [ "$country_code" = "null" ]; then
echo "🌐"
return
fi
# 将国家代码转换为 emoji使用 Unicode 区域指示符)
# 每个字母转换为对应的区域指示符号字符
local first="${country_code:0:1}"
local second="${country_code:1:1}"
# A=127462, 所以 A->🇦 就是 127462B->🇧 就是 127463
# 使用 printf 和 Unicode 编码
python3 -c "print(chr(127462 + ord('$first') - ord('A')) + chr(127462 + ord('$second') - ord('A')))"
}
# 捕获 Ctrl+C 信号
trap ctrl_c INT
function ctrl_c() {
echo ""
echo "---"
loss_rate=$(awk "BEGIN {printf \"%.1f\", ($total - $success)/$total*100}")
echo "$total requests transmitted, $success received, $((total - success)) failed, ${loss_rate}% packet loss"
exit 0
}
# 测试 HTTP 代理
test_http_proxy() {
echo "PROXY $PROXY_HOST:$PROXY_PORT ($TEST_URL): continuous mode"
echo ""
while true; do
total=$((total + 1))
# 使用 HTTP 代理发送请求
start_time=$(get_ms_time)
response=$(curl -x "http://${PROXY_HOST}:${PROXY_PORT}" \
-s \
-w "\n%{http_code}" \
--connect-timeout 10 \
--max-time 15 \
"${TEST_URL}" 2>&1)
end_time=$(get_ms_time)
elapsed=$((end_time - start_time))
# 分离响应体和状态码
http_code=$(echo "$response" | tail -n 1)
body=$(echo "$response" | sed '$d')
if [ "$http_code" = "200" ]; then
exit_ip=$(echo "$body" | grep -o '"query":"[^"]*"' | cut -d'"' -f4)
country_code=$(echo "$body" | grep -o '"countryCode":"[^"]*"' | cut -d'"' -f4)
if [ -n "$exit_ip" ]; then
flag=$(country_to_emoji "$country_code")
echo "proxy from $flag $exit_ip: seq=$total time=${elapsed}ms"
success=$((success + 1))
else
echo "proxy #$total: parse error"
fail=$((fail + 1))
fi
else
echo "proxy #$total: request failed (HTTP $http_code)"
fail=$((fail + 1))
fi
sleep $DELAY
done
}
# 主函数
test_http_proxy