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