#!/usr/bin/env python3
"""
修复 frps 配置 - 正确的 0.66.0 格式
"""

import paramiko
import time

HOST = "124.223.79.92"
USER = "root"
PASSWORD = "CHENliqq123"

def main():
    print("=" * 60)
    print("  修复 frps 配置 (v0.66.0 格式)")
    print("=" * 60)
    print()
    
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        print(f"[*] 连接到 {HOST}...")
        client.connect(HOST, username=USER, password=PASSWORD, timeout=10)
        print("[+] 连接成功")
        print()
        
        # 正确的 0.66.0 TOML 格式
        print("[1/5] 写入正确的配置...")
        frps_config = """bindPort = 7000
vhostHTTPPort = 80

[auth]
method = "token"
token = "chenliqq123"
"""
        stdin, stdout, stderr = client.exec_command(f"cat > /usr/local/frp/frps.toml << 'EOF'\n{frps_config}\nEOF")
        print("    [+] 配置写入完成")
        
        # 验证配置
        stdin, stdout, stderr = client.exec_command("cat /usr/local/frp/frps.toml")
        config = stdout.read().decode()
        print(f"    配置内容:\n{config}")
        
        # 停止旧进程
        print("\n[2/5] 停止旧进程...")
        stdin, stdout, stderr = client.exec_command("pkill -9 frps 2>/dev/null; sleep 1")
        print("    [+] 已停止")
        
        # 启动新进程
        print("\n[3/5] 启动 frps...")
        stdin, stdout, stderr = client.exec_command("nohup /usr/local/frp/frps -c /usr/local/frp/frps.toml > /var/log/frps.log 2>&1 &")
        time.sleep(3)
        
        # 验证
        print("\n[4/5] 验证 frps 状态...")
        stdin, stdout, stderr = client.exec_command("ps aux | grep frps | grep -v grep")
        ps_output = stdout.read().decode()
        
        stdin, stdout, stderr = client.exec_command("ss -lntp | grep -E ':(7000|80)'")
        ports = stdout.read().decode()
        
        if "frps" in ps_output:
            print("    ✅ frps 进程运行中")
            print(f"    {ps_output.strip()}")
        else:
            print("    ❌ frps 进程未运行")
            stdin, stdout, stderr = client.exec_command("tail -20 /var/log/frps.log")
            log = stdout.read().decode()
            print(f"    日志:\n{log}")
        
        if ports.strip():
            print("    ✅ 端口监听正常")
            print(f"    {ports.strip()}")
        else:
            print("    ❌ 端口未监听")
        
        # 启动本地 FRP 客户端
        print("\n[5/5] 启动本地 FRP 客户端...")
        print("    请在本地手动运行:")
        print("    cd C:\\Users\\Administrator\\Desktop\\BM\\frp_0.66.0_windows_amd64")
        print("    .\\frpc.exe -c C:\\Users\\Administrator\\Desktop\\BM\\AiTools\\Need_list\\frpc_need_list.toml")
        
        print()
        print("=" * 60)
        print("  修复完成!")
        print("=" * 60)
        
    except Exception as e:
        print(f"[-] 错误: {e}")
        import traceback
        traceback.print_exc()
    finally:
        client.close()

if __name__ == "__main__":
    main()
