From 4359ace81e308ed8b816c452a2e6799799bf84ad Mon Sep 17 00:00:00 2001 From: zqiushi Date: Tue, 25 Feb 2025 17:04:13 +0800 Subject: [PATCH] =?UTF-8?q?check=5Fconfig=20=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lsy-frpc/data/lsyfrpc/check_config.sh | 111 +++++++++++++++----------- 1 file changed, 64 insertions(+), 47 deletions(-) diff --git a/lsy-frpc/data/lsyfrpc/check_config.sh b/lsy-frpc/data/lsyfrpc/check_config.sh index 9b333ab..60b4798 100755 --- a/lsy-frpc/data/lsyfrpc/check_config.sh +++ b/lsy-frpc/data/lsyfrpc/check_config.sh @@ -6,12 +6,16 @@ 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) +# 获取本机 MAC 地址 +function get_mac_address() { + cat /sys/class/net/eth0/address | tr -d ':' +} + +# 从云端获取当前分配的端口 +function get_cloud_port() { + local mac_address="$1" echo "MAC Address: $mac_address" - # 尝试获取云端端口,最多重试 3 次 retries=3 for ((i=1; i<=retries; i++)); do response=$(curl -s -X 'POST' \ @@ -20,8 +24,7 @@ function get_cloud_config() { -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 @@ -36,64 +39,54 @@ function get_cloud_config() { 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" + echo "Cloud Port for 22: $cloud_port" + echo "Cloud Port for 9100: $((cloud_port + 10000))" } -# 检查 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" +# 读取本地配置的端口 +function get_local_port() { + local section="$1" + awk -v section="[${section}]" ' + $0 == section { found=1; next } + found && /^remote_port[ \t]*=[ \t]*/ { + split($0, parts, "="); + gsub(/[ \t]/, "", parts[2]); + print parts[2]; + exit; + } + ' "$CONFIG_FILE" +} - current_port_v1=$(awk -v section="[$cloud_mac_address_v1]" ' - $0 ~ section { found=1 } - found && /remote_port = [0-9]+/ { print $3; exit } - ' "$CONFIG_FILE") +# 更新 frpc.ini 配置 +function update_config() { + local mac_address="$1" + local cloud_port="$2" + local port_9100=$((cloud_port + 10000)) - 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" < "$CONFIG_FILE" </dev/null; then @@ -105,11 +98,35 @@ main() { 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" + # 获取本机 MAC 地址并处理冒号 + mac_address_raw=$(get_mac_address) + mac_address="${mac_address_raw//:}" # 移除冒号,用于section名称 + mac_address_orig=$(cat /sys/class/net/eth0/address) # 原始MAC用于API请求 + + # 获取云端分配的端口 + get_cloud_port "$mac_address_orig" + port_9100=$((cloud_port + 10000)) + + # 获取本地端口配置 + local_port_v1=$(get_local_port "${mac_address}-v1") + local_port_9100=$(get_local_port "${mac_address}-9100") + + echo "Local Port for [${mac_address}-v1]: $local_port_v1 (Expected: $cloud_port)" + echo "Local Port for [${mac_address}-9100]: $local_port_9100 (Expected: $port_9100)" + + # 检查端口是否匹配 + if [ "$local_port_v1" != "$cloud_port" ] || [ "$local_port_9100" != "$port_9100" ]; then + echo "[INFO] Configuration mismatch detected. Updating frpc.ini..." + update_config "$mac_address" "$cloud_port" + systemctl restart lsyfrpc + echo "[INFO] FRPC restarted with updated configuration." + else + echo "[INFO] Configuration is up to date. No changes needed." + fi } -main +main \ No newline at end of file