#!/bin/bash # FRPC 配置目录和文件路径 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=1 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\"}") 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 5 # 等待 5 秒后再重试 fi done cloud_mac_address="$mac_address-v1" echo "Cloud MAC Address: $cloud_mac_address" echo "Cloud Port: $cloud_port" } # 检查 FRPC 配置是否与云端一致 function check_config() { local cloud_port="$1" local cloud_mac_address="$2" # 从配置文件中读取现有的 MAC 地址和端口 current_mac_address=$(grep -o '\[.*\]' "$CONFIG_FILE" | tr -d '[]') current_port=$(grep -o 'remote_port = [0-9]*' "$CONFIG_FILE" | awk '{print $3}') echo "Current MAC Address in frpc.ini: $current_mac_address" echo "Current Port in frpc.ini: $current_port" # 比较配置文件中的 MAC 地址和端口是否与云端匹配 if [ "$current_mac_address" != "$cloud_mac_address" ] || [ "$current_port" != "$cloud_port" ]; then echo "[INFO] Configuration mismatch detected. Re-running install.sh..." sudo /bin/bash $FRPC_DIR/frp_install.sh else echo "[INFO] Configuration is up to date." fi } # 主函数,获取云端配置并检查配置 main() { get_cloud_config check_config "$cloud_port" "$cloud_mac_address" } main