v2rayN-VLESS 内核切换为Xray 支持Reality

需求

v2rayN-VLESS 内核切换为Xray 支持Reality

https://github.com/crazypeace/v2rayN-3.29-VLESS/issues/4


修改窗口设计

修改 Flow 下拉框可选项

找到VLESS服务器窗口文件

修改 Flow 下拉框的 Items

选中 Flow 下拉框, 在属性窗口中找到 Items, 点击 "..." 按钮


可以看到原本是


xtls-rprx-origin
xtls-rprx-origin-udp443
xtls-rprx-direct
xtls-rprx-direct-udp443


将内容修改为:


xtls-rprx-vision

修改 TLS 下拉框可选项



在窗口上添加 Realify 需要的参数

找到控件窗口, 拖放一个 Panel 控件到VLESS服务器窗口上. Name 属性设置为 panRealityMore

拖放 Label 控件和 Textbox 控件到这个 Panel 上.

设置这些新增的 Textbox 的 Name 属性为: "text" + 前面的 Label 如: textFingerprint


保存, 编译运行一下, 看一下界面显示的效果是否符合期望.


补充代码逻辑

VLESS窗口的OK按钮保存的时候, 将Reality相关的参数保存下来

AddVLESSServerForm.btnOK_Click 函数

相应的, 修改了 class VmessItem 的定义, 要把 VLESS 新增的参数加进去, 这样才能保存下来.

* 多说一句, 这里就可以看到 v3.29 版本时, v2rayN代码已经背了技术债了, 这里明明是个通用的节点数据结构, 但是名字还是 "VmessItem".

这里一路追下去, ConfigHandler.AddVlessServer 函数中要添加 Reality 相关参数的处理.

最终要把这些数据保存到硬盘上, 这样下次启动还能加载回来.

追到 ConfigHandler.ToJsonFile 函数, 看了一下处理, 是编程框架标准化实现的, 和具体的数据结构没关系. 我们把数据结构定义修改正确了就行了.

读取配置的时候, 在VLESS窗口上加载显示Reality相关参数

先查初始化函数, 在 AddVLESSServerForm_Load 函数里面有一个 BindingServer, 逻辑很简单, 就是把数据"绑定"到界面元素上去, 给界面元素赋值.

修改 AddVLESSServerForm.BindingServer 函数

这里很简单, 把数据赋值到新增的5个界面元素上去.

主窗口加载的时候, 读取程序上次运行保存的数据

查初始化函数, 在 MainForm_Load 里面, 有个 ConfigHandler.LoadConfig, 追下去.

在 ConfigHandler.LoadConfig 函数里面, 具体的实现是和前面的保存是相反的, 也是编程框架标准化实现的, 我们就不操心了.

应用 VLESS Reality 节点时, 要生成 Xray 的配置文件

找到界面菜单 Set as active server (Enter)

找到实际起产生效果的函数 SetDefaultServer, 追下去, 找到 LoadV2ray 函数

追下去, 找到 V2rayConfigHandler.GenerateClientConfig 函数, 就是它生成了 Xray 使用的配置文件

里面有个 V2rayConfigHandler.outbound 函数就是用来生成outbound配置的

在里面找到处理VLESS协议的部分, 找到 V2rayConfigHandler.boundStreamSettings 函数

怎么修改呢? 我们找到现在最新版的v2rayN, 抄一下里面的代码.

把 github.com 改为 github.dev 就可以打开一个在线的代码编辑器.

我们访问 https://github.dev/2dust/v2rayN, 然后在整个项目里面搜索 boundStreamSettings 

好了, 对照最新的代码, 不难发现新增的部分.

相应的, 更新 class StreamSettings, class Config, 需要添加一些相关的属性.

更换内核为 Xray

我们在 V2rayHandler.LoadV2ray 函数中, 追进去 V2rayRestart 函数, 再进 V2rayStart 函数, 再进 V2rayFindexe 函数

可以看到查找一个文件名列表 lstV2ray

这个列表是这样子的

说明 v2rayN v3.29 版本时, 2dust 已经设置 v2rayN 可以启动 xray.exe 

我们只要把 Xray 内核解压放进来就可以了. 无需更多修改.

编译, 运行, 测试一下. 检查基本功能是否正常. VLESS Reality 在 IPv4 和 IPv6 环境下都工作正常.


补完其它辅助功能

粘贴导入 VLESS Reality 节点

修改 V2rayConfigHandler.ImportFromClipboardConfig 函数, 处理粘贴导入VLESS Reality 协议的处理.
也是可以抄现在最新的 v2rayN 的代码.

复制导出 VLESS Reality 节点

修改 ConfigHandler.GetStdTransport 函数, 增加对 Reality 协议的处理.
一样, 参考现在最新的 v2rayN 的代码.

编译, 运行, 测试一下. 复制粘贴功能正常.

克隆服务器支持 Reality

修改 ConfigHandler.CopyServer 函数, 照着最新的代码抄, 改为用基于 JSON 的深拷贝


========


========

后记

有冲动想学习开发的朋友, 可以下载前一个版本标签的代码, 然后用M$ Visual Studio打开, 随着我的修改思路, 一步一步地去看.

我在教程中写 "编译, 运行, 测试一下" 的地方, 你也运行一下, 看一下阶段性的成果. 如果运行不起来, 或者结果不对, 那就要修改到结果正确, 不要着急冲下一段教程.

下载最新版本的源码包看修改完成后结果, 当然也可以用 github.dev 看当前最新代码. 你可以把最新的代码一段一段地复制粘贴到你学习的环境中, 相当于避免你自己打字的手误.

https://github.com/crazypeace/v2rayN-3.29-VLESS/archive/refs/tags/v3.29.0.3.zip

开发工具 M$ Visual Studio 免费的

https://apps.microsoft.com/detail/visual-studio-community-2022/XPDCFJDKLZJLP8?hl=zh-cn&gl=US

评论

The Hot3 in Last 30 Days

无服务器 自建短链服务 Url-Shorten-Worker 完整的部署教程

ClouDNS .asia免费域名 托管到CloudFlare开CDN白嫖Websocket WS通道翻墙 / desec.io