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-originxtls-rprx-origin-udp443xtls-rprx-directxtls-rprx-direct-udp443
将内容修改为:
找到控件窗口, 拖放一个 Panel 控件到VLESS服务器窗口上. Name 属性设置为 panRealityMore
设置这些新增的 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)
追下去, 找到 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 节点
复制导出 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
评论
发表评论