note/tech/test_proxy.sh
2025-11-19 10:16:05 +08:00

68 lines
2.0 KiB
Bash

#!/bin/bash
# Test the vps proxy is work
# if work, record to access.log in . folder
# if not work, record to error.log in . folder and push msg to dingtalk api
# SET THE ARGUMENTS
BWH_PROXY="http://127.0.0.1:1099"
JP_PROXY="http://127.0.0.1:1080"
ALL_PROXY=("BWH_PROXY" "JP_PROXY")
proxy_var=""
ip_address="https://v4.ident.me"
access_address="https://pac-9d7.pages.dev/access"
error_log="error.log"
access_log="access.log"
webhook="https://oapi.dingtalk.com/robot/send?access_token=b2a92184affebb3f26dfcab1eff9571b46c27a85380fd9ff56ca4c66cf93e1a1"
keyword="BWH:"
# Set directory
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
cd "$SCRIPT_DIR" || exit
my_proxy=""
# Function to log errors and send dingtalk message
log_error() {
local error_msg=$1
echo "$(date "+%Y-%m-%d %H:%M:%S") $error_msg $get_ip $get_realip" >> "$error_log"
local msg="$keyword ERROR:\n $proxy_var $error_msg \n$(date "+%Y-%m-%d %H:%M:%S")"
curl -sL "$webhook" \
-H 'Content-Type: application/json' \
-d "{\"msgtype\": \"text\",\"text\": {\"content\":\"$msg\"}}"
}
for proxy_var in "${ALL_PROXY[@]}"; do
# Get the real IP
export all_proxy=""
get_realip=$(curl -sL "$ip_address" || echo "GET_DIRECT_IP_FAILED")
# Set proxy
export all_proxy=${!proxy_var}
# Get proxy IP
get_ip=$(curl -sL "$ip_address" || echo "GET_${proxy_var}_IP_FAILED")
# Get access key words
get_pass=$(curl -sL "$access_address" || echo "${proxy_var}_CURL_CF_FAILED")
export all_proxy=""
if [ "$get_pass" == "${proxy_var}_CURL_CF_FAILED" ]; then
log_error "$get_pass"
else
echo "$(date "+%Y-%m-%d %H:%M:%S") $get_pass $get_ip $get_realip" >> "$access_log"
fi
done
# Check if log file is bigger than max size
max_size=104857600
date1=$(date +"%Y%m%d")
if [ -f "$access_log" ]; then
file_size=$(stat -c%s "$access_log")
if [ "$file_size" -gt "$max_size" ]; then
tar czvf "$access_log-$date1.tar.gz" "$access_log"
rm "$access_log"
touch "$access_log"
fi
fi