Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Xray-core C++ 实现

基于 async_net 异步网络库的 Xray-core C++20 协程实现。

特性

  • C++20 协程架构 — 基于 co_await/co_return 的异步 I/O 模型
  • 多协议支持 — VMess、VLESS、Trojan、Shadowsocks、SOCKS5、HTTP 代理
  • 多种传输层 — 原始 TCP、WebSocket、gRPC
  • 灵活路由 — 域名/IP/端口/协议多维度规则匹配,负载均衡
  • 内置 DNS — 多上游 DNS 服务器、LRU 缓存、静态 hosts
  • Xray 配置兼容 — 兼容 Xray-core JSON 配置格式
  • 自包含 JSON 解析器 — 无外部 JSON 库依赖

项目结构

xray/
├── CMakeLists.txt              # CMake 构建
├── main.cpp                    # 程序入口
├── include/xray/
│   ├── common/                 # 基础设施
│   │   ├── json.hpp            # 轻量级 JSON 解析器
│   │   ├── uuid.hpp            # UUID 生成与解析
│   │   ├── crypto.hpp          # 加密工具 (AES-GCM/ChaCha20/HKDF)
│   │   ├── net_addr.hpp        # 网络地址类型 (IPv4/IPv6/域名/CIDR)
│   │   └── buf.hpp             # MultiBuffer 缓冲区
│   ├── core/                   # 核心框架
│   │   ├── proxy.hpp           # inbound/outbound 抽象基类
│   │   ├── session.hpp         # 会话管理
│   │   ├── config.hpp          # 配置结构定义
│   │   └── xray_core.hpp       # 核心引擎
│   ├── proxy/                  # 代理协议
│   │   ├── vmess/              # VMess AEAD 协议
│   │   ├── vless/              # VLESS 轻量级协议
│   │   ├── trojan/             # Trojan TLS 协议
│   │   ├── shadowsocks/        # Shadowsocks AEAD 协议
│   │   ├── socks/              # SOCKS4/5 协议
│   │   ├── http/               # HTTP 代理协议
│   │   ├── dokodemo/           # Dokodemo-door 端口转发
│   │   ├── freedom/            # Freedom 直连出站
│   │   └── blackhole/          # Blackhole 黑洞
│   ├── routing/                # 路由系统
│   │   └── router.hpp          # 路由引擎/规则/负载均衡
│   ├── dns/                    # DNS 系统
│   │   └── dns_server.hpp      # DNS 服务器/缓存
│   └── transport/              # 传输层
│       ├── tcp_transport.hpp   # 原始 TCP + TLS
│       ├── ws_transport.hpp    # WebSocket
│       └── grpc_transport.hpp  # gRPC
├── src/                        # 实现文件
│   ├── common/                 # 基础设施实现
│   ├── core/                   # 核心框架实现
│   └── routing/                # 路由实现
└── tests/                      # 单元测试
    ├── test_json.cpp
    ├── test_uuid.cpp
    └── test_routing.cpp

构建

依赖

  • C++20 编译器(GCC 13+ / Clang 16+)
  • CMake 3.20+
  • async_net 异步网络库(默认路径 ../async_net

编译步骤

mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)

如果 async_net 不在默认路径:

cmake .. -DASYNC_NET_PATH=/path/to/async_net

运行测试

cd build
ctest --output-on-failure

运行

./build/xray -config /path/to/config.json

配置示例

{
  "log": { "loglevel": "warning" },
  "inbounds": [
    {
      "tag": "socks-in",
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks"
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom"
    },
    {
      "tag": "blocked",
      "protocol": "blackhole"
    }
  ],
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "ip": ["192.168.0.0/16", "10.0.0.0/8"],
        "outboundTag": "direct"
      }
    ]
  }
}

支持的协议

协议 入站 出站 说明
SOCKS5 含 AUTH_NONE 和用户名密码认证
HTTP 代理 CONNECT 隧道 + 正向代理
Shadowsocks AEAD: AES-128-GCM / AES-256-GCM / ChaCha20-Poly1305
VMess AEAD 加密,AES-128-GCM 头部
VLESS 轻量级协议,可选 XTLS-Vision
Trojan TLS 伪装,密码认证
Dokodemo-door 端口转发 / 透明代理
Freedom 直连出站
Blackhole 丢弃数据 / HTTP 响应

技术决策

  1. 协程模型 — 所有 I/O 使用 async_net 的 Task<T> + co_await,零开销异步
  2. 连接抽象 — 统一 reader/writer 接口,TCP/SSL/WS/gRPC 透明切换
  3. 加密 — 复用 async_net SSL 后端(wolfSSL/AWS-LC)的加密原语
  4. JSON — 自包含轻量级解析器,避免外部依赖
  5. 配置 — 兼容 Xray-core JSON 配置格式

许可证

MIT License

About

基于 async_net 异步网络库的 Xray-core C++20 协程实现.A C++20 coroutine-based implementation of Xray-core built on top of the async_net asynchronous networking library.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages