# java-frp **Repository Path**: tc11o8/java-frp ## Basic Information - **Project Name**: java-frp - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-28 - **Last Updated**: 2026-08-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java-frp 用 Java 简单实现的 frp 内网穿透工具。只实现核心 TCP 端口转发,不包含 P2P/HTTP vhost/QUIC/KCP/Dashboard 等高级功能。 ## 架构 ``` 用户 ──→ frps(公网:6000) ──工作连接──→ frpc(内网) ──→ 本地服务(127.0.0.1:22) ``` ### 三种连接 | 连接类型 | 方向 | 用途 | |---------|------|------| | 控制连接 | frpc → frps | 登录、注册代理、心跳 | | 工作连接 | frpc → frps | 转发用户数据 | | 用户连接 | 用户 → frps | 用户访问代理端口 | ### 消息协议 每条消息格式:`4字节type + 4字节length + N字节JSON body`(大端序) | 消息 | 方向 | 说明 | |-----|------|------| | LOGIN | frpc→frps | 客户端登录 | | LOGIN_RESP | frps→frpc | 返回 runId | | NEW_PROXY | frpc→frps | 注册代理 | | NEW_PROXY_RESP | frps→frpc | 代理注册结果 | | REQ_WORK_CONN | frps→frpc | 要求建立工作连接 | | NEW_WORK_CONN | frpc→frps | 工作连接报到 | | START_WORK_CONN | frps→frpc | 指示连接本地服务 | | PING/PONG | 双向 | 心跳 | ## 目录结构 ``` src/main/java/com/jfrp/ ├── common/ # 公共模块 │ ├── MessageType.java # 消息类型枚举 │ ├── Message.java # 消息封装 │ ├── Codec.java # 编解码 + 双向桥接 │ ├── Bodies.java # 消息体 POJO │ ├── ServerConfig.java # 服务端配置 │ ├── ClientConfig.java # 客户端配置 │ └── ProxyConfig.java # 代理配置 ├── server/ # 服务端 │ ├── FrpServer.java # 主入口,监听连接 │ ├── ControlConn.java # 控制连接处理 │ ├── ProxyServer.java # 代理端口监听 │ └── WorkConn.java # 工作连接包装 ├── client/ # 客户端 │ ├── FrpClient.java # 主入口,登录 │ └── ControlConn.java # 控制连接 + 工作连接处理 └── Launcher.java # 统一入口 ``` ## 编译 ```bash mvn clean package ``` ## 运行 ```bash # 启动服务端(监听 7000 端口) java -jar target/java-frp.jar server frps.json # 启动客户端(连接 frps,注册代理) java -jar target/java-frp.jar client frpc.json # 用户访问 ssh -p 6000 user@frps公网IP # 通过 frps:6000 → frpc → 本地 22 端口 curl http://frps公网IP:8080 # 通过 frps:8080 → frpc → 本地 8080 端口 ``` ## 配置文件 ### frps.json ```json { "bindAddr": "0.0.0.0", "bindPort": 7000, "token": "secret-token" } ``` ### frpc.json ```json { "serverAddr": "127.0.0.1", "serverPort": 7000, "token": "secret-token", "poolCount": 2, "proxies": [ { "name": "ssh", "type": "tcp", "remotePort": 6000, "localIp": "127.0.0.1", "localPort": 22 } ] } ``` ## 与 frp 的对应关系 | frp (Go) | java-frp (Java) | 说明 | |----------|-----------------|------| | cmd/frps | server/ | 服务端 | | cmd/frpc | client/ | 客户端 | | pkg/msg/msg.go | common/MessageType + Message | 消息定义 | | pkg/util/vnet | common/Codec.bridge() | 数据桥接 | | server/control.go | server/ControlConn.java | 控制连接 | | server/proxy/proxy.go | server/ProxyServer.java | 代理监听 | | client/control.go | client/ControlConn.java | 控制连接 | | client/service.go | client/FrpClient.java | 客户端主逻辑 | ## 限制 - 只支持 TCP 代理(无 HTTP/HTTPS/UDP/STCP/XTCP) - 无加密/压缩 - 无 Dashboard - 无负载均衡分组 - 使用 BIO + 线程池(非 NIO)