feat: init

This commit is contained in:
isboyjc
2026-03-29 03:31:59 +08:00
parent f2c3fbac24
commit f55209d8d3
27 changed files with 4424 additions and 664 deletions

95
test/test_proxy.sh Executable file
View File

@@ -0,0 +1,95 @@
#!/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