# java-frpc **Repository Path**: wsh66660/java-frpc ## Basic Information - **Project Name**: java-frpc - **Description**: 这是一个用Java实现的FRP(Fast Reverse Proxy)客户端,提供内网穿透功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2025-09-04 - **Last Updated**: 2025-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java FRPC - FRP客户端Java实现 这是一个用Java实现的FRP(Fast Reverse Proxy)客户端,提供内网穿透功能。 ## 功能特性 - ✅ **多协议支持**: TCP、UDP、HTTP、HTTPS - ✅ **配置灵活**: 支持YAML格式配置文件 - ✅ **连接管理**: 自动重连、心跳检测 - ✅ **数据加密**: 支持传输数据加密 - ✅ **数据压缩**: 支持传输数据压缩 - ✅ **并发处理**: 支持多代理并发运行 - ✅ **日志记录**: 完善的日志系统 ## 快速开始 ### 1. 编译项目 ```bash # 克隆项目 git clone cd java-frpc # 编译项目 mvn clean package ``` ### 2. 配置文件 创建配置文件 `frpc.yml`: ```yaml common: server_addr: "your.frp.server.com" server_port: 7000 token: "your-secret-token" log_level: "info" proxies: - name: "ssh" type: "tcp" local_ip: "127.0.0.1" local_port: 22 remote_port: 6000 - name: "web" type: "http" local_ip: "127.0.0.1" local_port: 8080 custom_domains: ["yourdomain.com"] ``` ### 3. 运行客户端 ```bash # 运行客户端 java -jar target/java-frpc-1.0.0.jar frpc.yml ``` ## 配置说明 ### 通用配置 (common) | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | server_addr | string | - | FRP服务器地址 | | server_port | int | 7000 | FRP服务器端口 | | token | string | - | 认证token | | auth_method | string | "token" | 认证方法 | | pool_count | int | 1 | 连接池数量 | | tls_enable | boolean | true | 是否启用TLS | | log_level | string | "info" | 日志级别 | | log_file | string | "./frpc.log" | 日志文件路径 | | tcp_mux | boolean | true | 是否启用TCP复用 | | heartbeat_interval | int | 30 | 心跳间隔(秒) | | heartbeat_timeout | int | 90 | 心跳超时(秒) | ### 代理配置 (proxies) #### TCP代理 ```yaml - name: "ssh" type: "tcp" local_ip: "127.0.0.1" local_port: 22 remote_port: 6000 use_encryption: false use_compression: false ``` #### HTTP代理 ```yaml - name: "web" type: "http" local_ip: "127.0.0.1" local_port: 8080 custom_domains: ["example.com"] use_encryption: false use_compression: true ``` #### HTTPS代理 ```yaml - name: "https" type: "https" local_ip: "127.0.0.1" local_port: 8443 custom_domains: ["secure.example.com"] use_encryption: true use_compression: true ``` #### UDP代理 ```yaml - name: "dns" type: "udp" local_ip: "127.0.0.1" local_port: 53 remote_port: 6001 use_encryption: false use_compression: false ``` ## 协议支持 ### 支持的消息类型 - **Login**: 客户端登录请求 - **LoginResp**: 登录响应 - **Heartbeat**: 心跳包 - **HeartbeatResp**: 心跳响应 - **NewProxy**: 新建代理请求 - **NewProxyResp**: 新建代理响应 - **CloseProxy**: 关闭代理 - **NewWorkConn**: 新建工作连接 - **NewWorkConnResp**: 工作连接响应 - **Data**: 数据传输 - **Error**: 错误消息 ## 架构设计 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 控制连接 │ │ 工作连接 │ │ 本地服务 │ │ Connection │ │ WorkConn │ │ Local Service │ │ Manager │◄───┤ ProxyHandler │◄───┤ │ │ │ │ │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ └────────────────────────┴────────────────────────┘ FRP Client ``` ## 日志配置 日志配置文件位于 `src/main/resources/logback.xml`,支持: - 控制台输出 - 文件输出(自动轮转) - 多级别日志控制 ## 开发指南 ### 项目结构 ``` src/main/java/com/frp/ ├── client/ # 客户端核心类 ├── config/ # 配置管理 ├── protocol/ # 协议定义 ├── proxy/ # 代理处理 └── util/ # 工具类 ``` ### 编译和测试 ```bash # 编译 mvn clean compile # 运行测试 mvn test # 打包 mvn clean package # 运行 mvn exec:java -Dexec.mainClass="com.frp.client.FrpcApplication" -Dexec.args="frpc.yml" ``` ## 故障排除 ### 常见问题 1. **连接失败** - 检查服务器地址和端口 - 确认网络连接正常 - 检查防火墙设置 2. **认证失败** - 确认token配置正确 - 检查服务器端配置 3. **代理创建失败** - 检查端口是否被占用 - 确认代理配置正确 - 查看服务器端日志 ### 调试模式 将日志级别设置为 `DEBUG` 以获取更详细的信息: ```yaml common: log_level: "debug" ``` ## 许可证 MIT License ## 贡献 欢迎提交Issue和Pull Request!