#!/bin/bash # FRPC 配置目录和文件路径 LOCK_FILE="/tmp/lsyfrpc_check_config_running.lock" FRPC_FILE="/data/lsyfrpc/frpc" FRPC_DIR="/data/lsyfrpc" CONFIG_FILE="$FRPC_DIR/frpc.ini" # 云端接口获取当前端口和 MAC 地址 function get_cloud_config() { mac_address=$(cat /sys/class/net/eth0/address) echo "MAC Address: $mac_address" # 尝试获取云端端口,最多重试 3 次 retries=3 for ((i=1; i<=retries; i++)); do response=$(curl -s -X 'POST' \ 'https://frp-box.jxm.cool/request_port/' \ -H 'accept: application/json' \ -H 'Authorization: Basic NTI0NzgxNTctMjY1Zi00ZGNjLWE0NDMtODE0YzJhMDMxYjhjOmM2ZDI3Nzc1LTJhMDgtNDkyZS1iMTExLTg5YWQzZDY5ZTliMA==' \ -H 'Content-Type: application/json' \ -d "{\"mac_address\": \"$mac_address\"}") echo "Response: $response" cloud_port=$(echo "$response" | grep -o '"port":[0-9]*' | awk -F: '{print $2}') if [ -n "$cloud_port" ]; then break else echo "[ERROR] Failed to get port from the cloud. Retry $i of $retries." if [ "$i" -eq "$retries" ]; then echo "[ERROR] Max retries reached. Exiting." exit 1 fi sleep 10 fi done cloud_mac_address_v1="$mac_address-v1" cloud_mac_address_v2="$mac_address-v2" cloud_port_v2=$((cloud_port + 10000)) echo "Cloud MAC Address V1: $cloud_mac_address_v1" echo "Cloud MAC Address V2: $cloud_mac_address_v2" echo "Cloud Port V1 (22): $cloud_port" echo "Cloud Port V2 (9100): $cloud_port_v2" } # 检查 FRPC 配置是否与云端一致 function check_config() { local cloud_port="$1" local cloud_mac_address_v1="$2" local cloud_mac_address_v2="$3" local cloud_port_v2="$4" current_port_v1=$(awk -v section="[$cloud_mac_address_v1]" ' $0 ~ section { found=1 } found && /remote_port = [0-9]+/ { print $3; exit } ' "$CONFIG_FILE") current_port_v2=$(awk -v section="[$cloud_mac_address_v2]" ' $0 ~ section { found=1 } found && /remote_port = [0-9]+/ { print $3; exit } ' "$CONFIG_FILE") echo "Current Port for $cloud_mac_address_v1 (22): '$current_port_v1' (Expected: '$cloud_port')" echo "Current Port for $cloud_mac_address_v2 (9100): '$current_port_v2' (Expected: '$cloud_port_v2')" if [ "$current_port_v1" != "$cloud_port" ] || [ "$current_port_v2" != "$cloud_port_v2" ]; then echo "[INFO] Configuration mismatch detected. Updating frpc.ini..." cat > "$CONFIG_FILE" </dev/null; then echo "[INFO] Lock file exists and script is running (PID: $lock_pid). Exiting." exit 0 else echo "[INFO] Stale lock file detected. Removing." rm -f "$LOCK_FILE" fi fi echo $$ > "$LOCK_FILE" trap "rm -f $LOCK_FILE" EXIT SIGHUP SIGINT SIGTERM SIGQUIT get_cloud_config check_config "$cloud_port" "$cloud_mac_address_v1" "$cloud_mac_address_v2" "$cloud_port_v2" } main