Skip to content

zshaxy/npj

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NPJ Java - 项目概述

高性能内网穿透系统 - Java版

版本: 1.0.0-SNAPSHOT
开发状态: 🟢 活跃开发中
构建状态: ✅ BUILD SUCCESS
最后更新: 2025-11-25


📋 目录


项目简介

NPJ Java 是一个基于 Netty 的高性能内网穿透系统,采用 Java 语言。该项目实现了服务端(Server)、客户端(Client)和Web管理界面的完整功能。

核心理念

  • 高性能: 基于Netty异步事件驱动框架
  • 多协议: 支持TCP、HTTP、HTTPS、SOCKS5、UDP
  • 安全: AES-256加密 + 可选压缩
  • 易用: 现代化Web管理界面
  • 可扩展: 模块化设计,易于扩展新功能

应用场景

  1. 内网服务暴露: 将内网服务(如Web应用、数据库)安全暴露到公网
  2. 远程办公: 访问公司内网资源
  3. 开发测试: 快速展示本地开发环境
  4. 跨网段通信: 打通不同网络环境

核心特性

✅ 已实现功能

🌐 网络层

  • 多路复用 (Multiplexing): 单一TCP连接承载多个逻辑会话
  • 连接池管理: 自动重连、心跳检测、连接复用
  • 协议编解码: 自定义二进制协议,高效传输
  • 流控管理: 窗口大小控制,防止内存溢出

🔐 安全层

  • AES-256加密: 所有数据端到端加密
  • SSL/TLS支持: HTTPS代理SSL终止
  • SNI (Server Name Indication): 多域名HTTPS支持
  • 可选压缩: Snappy压缩算法,减少带宽

🚀 代理服务

  • TCP代理: 透明TCP流量转发
  • HTTP代理: 基于Host header的路由
  • HTTPS代理: SSL/TLS termination + 自签名证书
  • SOCKS5代理: RFC 1928/1929完整实现,支持认证
  • UDP代理: UDP数据报转发 + 会话管理

💻 Web管理

  • 仪表盘: 实时统计、ECharts可视化
  • 客户端管理: 查看/断开客户端连接
  • 隧道管理: 创建/启停/删除隧道
  • 响应式设计: Bootstrap 3 + 现代UI

技术架构

整体架构图

graph TB
    subgraph "公网 Server"
        WebUI[Web管理界面]
        Bridge[Bridge服务器]
        PM[ProxyManager]
        
        subgraph "代理服务"
            TCP[TCP Proxy]
            HTTP[HTTP Proxy]
            HTTPS[HTTPS Proxy]
            SOCKS5[SOCKS5 Proxy]
            UDP[UDP Proxy]
        end
    end
    
    subgraph "内网 Client"
        Client[NPS Client]
        LocalApp[本地应用]
    end
    
    Internet[互联网用户]
    
    Internet -->|访问| TCP
    Internet -->|访问| HTTP
    Internet -->|访问| HTTPS  
    Internet -->|访问| SOCKS5
    Internet -->|访问| UDP
    
    TCP --> PM
    HTTP --> PM
    HTTPS --> PM
    SOCKS5 --> PM
    UDP --> PM
    
    PM --> Bridge
    Bridge <-->|加密隧道| Client
    Client --> LocalApp
    
    WebUI --> Bridge
Loading

分层架构

┌─────────────────────────────────────────┐
│         Web Management Layer            │  ← Spring Boot REST API
├─────────────────────────────────────────┤
│         Proxy Layer                      │  ← TCP/HTTP/HTTPS/SOCKS5/UDP
├─────────────────────────────────────────┤
│         Bridge Layer                     │  ← Client Connection Management
├─────────────────────────────────────────┤
│         Multiplexing Layer               │  ← Session Management
├─────────────────────────────────────────┤
│         Protocol Layer                   │  ← Codec, Encryption, Compression
├─────────────────────────────────────────┤
│         Network Layer                    │  ← Netty + Connection Pool
└─────────────────────────────────────────┘

模块说明

📦 npj-common

公共基础模块

npj-common/
├── config/          # 配置类
│   ├── CommonConfig.java
│   └── Constants.java
└── utils/           # 工具类
    ├── IdGenerator.java
    └── NetworkUtils.java

功能: 提供项目通用配置和工具方法


📦 npj-core

核心网络模块

npj-core/
├── connection/      # 连接管理
│   ├── Connection.java           - 连接封装
│   ├── ConnectionManager.java    - 连接池
│   └── ConnectionListener.java   - 事件监听
├── crypto/          # 加密压缩
│   ├── AESCrypto.java           - AES-256
│   ├── Compressor.java          - Snappy压缩
│   ├── EncryptionHandler.java
│   └── CompressionHandler.java
├── mux/             # 多路复用
│   ├── Multiplexer.java         - 多路复用器
│   ├── MuxSession.java          - 会话管理
│   └── SessionEventListener.java
├── network/         # Netty层
│   ├── NettyServer.java         - 服务器引导
│   ├── NettyClient.java         - 客户端引导
│   └── ChannelInitializerFactory.java
└── protocol/        # 协议层
    ├── Protocol.java            - 协议定义
    ├── ProtocolEncoder.java     - 编码器
    ├── ProtocolDecoder.java     - 解码器
    └── messages/                - 消息类型
        ├── AuthMessage.java
        ├── HeartbeatMessage.java
        ├── DataMessage.java
        ├── TunnelMessage.java
        └── ...

统计:

  • 文件数: ~25个
  • 代码行数: ~3500行
  • 核心功能: 网络通信、协议处理、加密压缩、多路复用

📦 npj-server

服务端模块

npj-server/
├── bridge/          # Bridge核心
│   ├── Bridge.java              - Bridge服务器
│   ├── ClientConnection.java    - 客户端连接
│   └── BridgeHandler.java       - 消息处理
├── proxy/           # 代理服务
│   ├── ProxyService.java        - 代理接口
│   ├── Tunnel.java              - 隧道实体
│   ├── TcpProxy.java            - TCP代理
│   ├── TcpProxyHandler.java
│   ├── HttpProxy.java           - HTTP代理
│   ├── HttpProxyHandler.java
│   ├── HostManager.java
│   ├── HttpsProxy.java          - HTTPS代理 ⭐
│   ├── HttpsProxyHandler.java
│   ├── Socks5Proxy.java         - SOCKS5代理 ⭐
│   ├── Socks5CommandHandler.java
│   ├── Socks5RelayHandler.java
│   ├── UdpProxy.java            - UDP代理 ⭐
│   ├── UdpProxyHandler.java
│   ├── ssl/                      - SSL管理
│   │   ├── SslContextManager.java
│   │   └── CertificateGenerator.java
│   └── udp/                      - UDP会话
│       ├── UdpSession.java
│       └── UdpSessionManager.java
└── service/         # Spring服务
    ├── BridgeService.java
    └── ProxyManagerService.java

统计:

  • 文件数: ~25个
  • 代码行数: ~3000行
  • 核心功能: Bridge连接管理、5种代理类型

⭐ Phase 3新增: HTTPS/SOCKS5/UDP代理(11个文件)


📦 npj-client

客户端模块

npj-client/
├── config/
│   └── ClientConfig.java        - 客户端配置
├── service/
│   ├── ClientService.java       - Spring服务
│   └── TunnelConnection.java    - 隧道连接
└── TRPClient.java               - 客户端核心

统计:

  • 文件数: ~5个
  • 代码行数: ~600行
  • 核心功能: 连接到Server、本地流量转发

📦 npj-web

Web管理界面

npj-web/
├── controller/      # REST API
│   ├── ApiResponse.java         - 统一响应
│   ├── DashboardController.java - 仪表盘API
│   ├── ClientController.java    - 客户端API
│   └── TunnelController.java    - 隧道API
└── resources/
    └── static/      # 前端资源
        ├── index.html           - SPA入口
        ├── css/
        │   └── style.css        - 现代样式
        └── js/
            ├── app.js           - 路由控制
            ├── api.js           - API封装
            ├── utils.js         - 工具函数
            ├── dashboard.js     - 仪表盘(ECharts)
            ├── clients.js       - 客户端管理
            └── tunnels.js       - 隧道管理

统计:

  • REST API: 3个Controller
  • 前端文件: 8个(HTML/CSS/JS)
  • 核心功能: 可视化管理、实时统计

代理类型

1. TCP 代理

用途: 任意TCP协议转发(SSH、MySQL、RDP等)

type: tcp
listenPort: 2222
targetHost: 192.168.1.100  
targetPort: 22

特性:

  • 透明转发,无协议解析
  • 支持任何基于TCP的应用
  • 双向流量统计

2. HTTP 代理

用途: HTTP服务托管,基于域名路由

type: http
listenPort: 80
targetHost: localhost
targetPort: 8080
domain: myapp.example.com

特性:

  • Host header路由
  • 多域名支持
  • 虚拟主机

3. HTTPS 代理 ⭐

用途: HTTPS服务托管,SSL终止

type: https
listenPort: 443
targetHost: localhost
targetPort: 8080
domain: secure.example.com

特性:

  • SSL/TLS Termination: Server端解密
  • SNI支持: 多域名证书
  • 自签名证书: 自动生成
  • SSL Context缓存: 性能优化

实现亮点:

// SSL handler with SNI
SslContext sslContext = sslContextManager.getContext(sniHost);
pipeline.addFirst("ssl", sslContext.newHandler(ch.alloc()));

4. SOCKS5 代理 ⭐

用途: 通用代理协议,支持各类应用

type: socks5
listenPort: 1080
auth:
  enabled: true
  username: user
  password: pass

特性:

  • RFC 1928: 完整SOCKS5协议
  • RFC 1929: 用户名/密码认证
  • CONNECT支持: TCP连接代理
  • 多协议: HTTP/HTTPS/SSH等

协议流程:

Client → Method Selection
Server → Methods Available
Client → Auth Request (optional)
Server → Auth Response
Client → CONNECT Command
Server → Success/Failure
Client ⇄ Server → Data Relay

5. UDP 代理 ⭐

用途: UDP协议转发(DNS、游戏、VoIP等)

type: udp
listenPort: 9000
targetHost: 8.8.8.8
targetPort: 53

特性:

  • DatagramPacket转发: 保持UDP语义
  • 会话管理: IP:Port → Session映射
  • 自动清理: 60秒超时回收
  • 并发安全: ConcurrentHashMap

会话管理:

String sessionKey = sender.getAddress().getHostAddress() + ":" + sender.getPort();
UdpSession session = sessionManager.getOrCreateSession(sessionKey);
// Auto cleanup after 60s timeout

Web管理界面

界面预览

1. 仪表盘 📊

  • 实时统计: 客户端数、隧道数、流量
  • 系统信息: 版本、运行时间、内存
  • ECharts图表: 隧道类型分布饼图
  • 配置信息: Server设置展示

2. 客户端管理👥

  • Bootstrap Table: 搜索、分页、排序
  • 实时状态: 在线/离线
  • 流量统计: 接收/发送字节
  • 操作: 查看详情、断开连接

3. 隧道管理 🚇

  • 隧道列表: 所有配置的隧道
  • 创建隧道: Modal表单
  • 支持类型: TCP/HTTP/HTTPS/SOCKS5/UDP
  • 操作: 启动、停止、删除

技术实现

前端框架:

  • Bootstrap 3.3.7
  • jQuery 3.6.0
  • ECharts 5.4.0
  • Bootstrap Table 1.21.0
  • Font Awesome 4.7.0

设计特点:

  • 📱 响应式布局
  • 🎨 现代minimalist风格
  • ⚡ SPA单页应用
  • 🔄 实时数据刷新

快速开始

前置要求

  • Java 17+
  • Maven 3.6+
  • 端口: 8024(Bridge), 8080(Web)

构建项目

git clone https://github.com/your-repo/npj-java.git
cd npj-java
mvn clean package -DskipTests

启动Server

java -jar npj-server/target/npj-server-1.0.0-SNAPSHOT.jar

启动Client

java -jar npj-client/target/npj-client-1.0.0-SNAPSHOT.jar \
  --server-host=your-server-ip \
  --server-port=8024 \
  --client-id=client001

访问Web界面

http://localhost:8080

技术栈

后端技术

技术 版本 用途
Java 17 开发语言
Spring Boot 3.2.0 应用框架
Netty 4.1.104 网络框架
Jackson 2.15.3 JSON处理
Snappy 1.1.10 压缩算法
Bouncy Castle 1.77 加密库
Maven 3.9+ 构建工具

前端技术

技术 版本 用途
Bootstrap 3.3.7 UI框架
jQuery 3.6.0 DOM操作
ECharts 5.4.0 数据可视化
Bootstrap Table 1.21.0 表格组件
Font Awesome 4.7.0 图标库

核心依赖

<!-- Netty -->
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.104.Final</version>
</dependency>

<!-- Spring Boot -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- Bouncy Castle (加密) -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk18on</artifactId>
    <version>1.77</version>
</dependency>

项目亮点

🚀 性能优势

  1. Netty异步: 非阻塞I/O, 单线程处理千万连接
  2. 零拷贝: Direct ByteBuf减少内存拷贝
  3. 连接复用: 多路复用减少TCP握手开销
  4. 协议优化: 自定义二进制协议,比JSON高效

🔒 安全特性

  1. 端到端加密: 所有流量AES-256加密
  2. SSL支持: HTTPS proxy SSL终止
  3. 认证机制: SOCKS5支持用户名/密码
  4. 证书管理: 自动生成自签名证书

💡 架构设计

  1. 分层架构: 网络→协议→业务清晰分离
  2. 模块化: 5个独立Maven模块
  3. 可扩展: 新增代理类型只需实现ProxyService
  4. Spring集成: 完整的依赖注入和配置管理

📊 可维护性

  1. 代码规范: Google Java Style
  2. 文档完善: 详细的README和注释
  3. 测试覆盖: 单元测试(待完善)
  4. 日志体系: SLF4J统一日志

性能指标

理论性能 (单机)

指标 数值 说明
并发连接数 10,000+ Netty事件循环
吞吐量 1GB/s+ 取决于网卡和CPU
延迟 <5ms 本地测试
内存占用 ~200MB 空载状态

实际性能取决于硬件配置、网络带宽和业务场景


目录结构

npj-java/
├── npj-common/               # 公共模块
├── npj-core/                 # 核心网络
├── npj-server/               # 服务端
├── npj-client/               # 客户端  
├── npj-web/                  # Web界面
├── pom.xml                   # 父POM
├── README.md                 # 主README
└── docs/                     # 文档目录(可选)

贡献指南

开发流程

  1. Fork项目
  2. 创建特性分支: git checkout -b feature/xxx
  3. 提交代码: git commit -am 'Add xxx'
  4. 推送分支: git push origin feature/xxx
  5. 提交PR

代码规范

  • 遵循Google Java Style Guide
  • 使用SLF4J记录日志
  • 编写单元测试
  • 添加Javadoc注释

许可证

MIT License


联系方式


致谢

本项目参考 NPS ,感谢原作者的优秀设计。


🎉 项目状态: 核心功能已完成,可投入测试使用!

📅 最后更新: 2025-11-25
👨‍💻 维护者: axyzyz

About

基于java的一款轻量级、高性能、功能强大的内网穿透代理服务器。支持tcp、udp、socks5、https、http等几乎所有流量转发,可用来访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析、内网socks5代理等等……,并带有功能强大的web管理端。a lightweight, high-performance, powerful intranet penetration proxy server, with a powerful web management terminal.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors