博文

目前显示的是标签为“hy2”的博文

谁有 win7 的环境 测试一下能不能 在 go v1.21.4 环境下编译 v2ray v5.18.0 以支持 hy2

图片
我有了 方便好用的 v2rayN - 3.29 支持 hy2 然后就一直在想, win7 环境下的用户, 怎么用 hy2 猛地发现 xray 还可以编译 win7 版本. 找了一圈信息源, 说是用 go v1.21.4 环境编译出来的是可以放在win7下跑的. 不知道读者里面有没有 win7 环境的, 试下能否安装 go v1.21.4 环境. 会不会在安装时就报错不让装. https://go.dev/dl/go1.21.4.windows-386.msi https://go.dev/dl/go1.21.4.windows-amd64.msi 如果可以安装编译环境成功的话, 是可以参考 这篇教程自己编译 v2ray v5.18.0 的. 放到 v2rayN-VLESS-3.29 目录里面就可以连hy2节点了. 我自己在 Win10 64位环境下, 先后安装了 go v1.21.4 32位环境 和 64位环境, 编译了 v2ray v5.18.0 上传到了 github  https://github.com/crazypeace/v2ray-hy2-v4json/ 不想自己操作编译的读者, 可以下载了试试. https://github.com/crazypeace/v2ray-hy2-v4json/raw/refs/heads/main/V2Ray-5.18.0(go1.21.4-windows-386).zip https://github.com/crazypeace/v2ray-hy2-v4json/raw/refs/heads/main/V2Ray-5.18.0(go1.21.4-windows-amd64).zip 欢迎反馈.

v2ranN-VLESS-HY2 支持 Reality 协议与 Hysteria2 协议节点并存

图片
需求 v2ranN-VLESS 支持了 reality, 基于 xray 内核 v2ranN-HY2 支持了 hy2, 基于 v2ray 内核 reality和hy2都好用, 都需要.  我是在VPS上同时部署了多个协议的(只要用不同的端口, 不冲突就可以了).  在客户端, 我可不想为了换个协议用用, 就要关个软件再开个软件. 那么, 就要在 v2rayn.exe 的目录下同时放 xray.exe 和 v2ray.exe 然后要根据不同的协议来调用不同的内核. 分析 我们先来看看目前的代码逻辑是怎样的. 根据 之前的开发经验 , 我们知道, 启动内核是在 V2rayHandler 模块的 V2rayStart 函数 里的 p.Start () 倒着走读代码, 发现 V2rayFindexe 函数是用来判断启动哪个内核程序的. 逻辑是, 在 lstV2ray 这个列表中取字符串出来, 再拼上 .exe 的后缀, 然后看当前目录有没有这样的文件存在. 而这个 lstV2ray 列表呢. 存着这些. 也就是说, v2rayN 3.29 的原始逻辑是, 当前目录下, 这3个内核的文件, 找到哪个就启动哪个. 那么, 我们要做的是: 建一个"全局"变量, 用于保存 指定的内核程序名称. 在启动内核之前, 要先根据使用的协议来判断是否需要指定内核程序名称. 实践 添加 模板内"全局"的变量 "设为活动服务器" 的功能, 最后启动内核之前, 加个判断内核的函数调用 测速功能. 最后启动内核之前, 加个判断内核的函数调用. 把v2rayN软件设置里面的 outbound 也就是节点信息传进去. 而这个新增的 SetCoreExeByConfig 函数的实现呢. 就是根据节点信息里的特定属性, 判断是否reality协议, 是否hy2协议. 最后一个修改, 在查找内核程序的函数 V2rayFindexe 中, 原来的逻辑是遍历 { "xray", "wv2ray", "v2ray"} 这个列表. 现在修改为, 先构造一个列表. 规则是: 如果指定了内核, 那么列表中只有这个内核程序. 如果没有指定内核, 那么列表和原来的逻辑保持一致, 就是 { "xra

v2rayN-HY2 测试真连接延迟

图片
总功能列表在 这篇分析 里. 我们现在实现第 9 项 Ctrl+R 测速 打开主窗口 .cs 文件的设计器 找到菜单项, 双击,  打开菜单项 "测试真连接延迟" 的响应函数 走读代码, 跳转到 RunRealPing 函数. 继续走读代码, 一路跳转到 V2rayStartNew 函数 我们用 上一篇 一样的方法, 在 p.Start() 上设置断点. 再检查设置的启动参数. 可以看到, 实际上相当于在命令行执行 D:\_work\v2rayN-3.29-VLESS\v2rayN\bin\Debug\v2ray.exe -config stdin: 同样的, 这是 v2ray v4版本的启动语法. 我们要参考 v5 版本的启动语法了. 官方文档 https://www.v2fly.org/guide/start.html#运行 要注意, 测速的启动过程, 并不要指定配置文件. 而是, 先把程序启动起来, 再往 stdin (标准输入流) 输入json格式的配置文本. 而 v2ray v5版本, 要从stdin (标准输入流) 获取json格式的文本, 就要以 不指定配置文件的方式启动, 而且在同目录下不能有 config.json 文件. 所以, 我们把 生成配置文件的文件名, 修改为 不是config.json  比如, runconfig.json 进一步的, 我们使用的是 v4格式的json配置文本, 所以参数还要加上 -format json 最终, 修改启动参数为 run -format json 跑起来测试一下.   记得把以前生成的 config.json 文件删掉哦. 功能正常. ======== 开了一个分支, 本文的修改内容已提交. https://github.com/crazypeace/v2rayN-3.29-VLESS/tree/hy2 如果你有兴趣, 可以看到整个的开发过程. 本次修改记录 https://github.com/crazypeace/v2rayN-3.29-VLESS/commit/3129b5e ======== 如果只是使用 hy2 的话, 应该是可用的状态了. 所以发布了一个 pre release https://github.com/crazypeace/v2rayN-3.29-VLESS

v2rayN-HY2 导出分享链接至剪贴板 显示分享二维码

图片
总功能列表在 这篇分析 里. 我们现在实现第 8 项 导出分享链接至剪贴板 打开主窗口 .cs 文件的设计器 找到菜单项, 双击,  打开菜单项 "导出分享URL至剪贴板" 的响应函数 走读代码, 一路 F12 跳进去, 直到 GetVmessQRCode 函数. 这里就是生成分享URL的地方. 很明显, 函数名称没有及时更新, 还叫 Vmess  Hy2 分享链接的格式有官方定义. https://v2.hysteria.network/zh/docs/developers/URI-Scheme/ 示例: hysteria2://密码@服务器IP域名:端口?insecure=跳过证书验证#备注 我们照着 VLESS 的逻辑抄一遍. 没有encryption参数, 所以去掉. 继续跳进 GetStdTransport 函数. 这里面是处理 streamSettings 结构中的数据. 我们添加 hy2 的处理. 跑起来测试一下. 能复制出分享URL了. 但是里面多了一些参数. hysteria2://7c6c918f-6e80-3283-9cf0-a8d34e80f86e@104.168.128.251:2053?security=tls&type=hysteria2&insecure=1#HY2-104.168.128.251 security 和 type 参数在 hy2 的官方定义中是不应该出现的. 所以我们改一下, 不要调用 GetStdTransport 函数了, 直接在 GetVmessQRCode 函数中, 把 insecure 参数填充了就算了. 测试一下, 分享的URL正常. 生成的二维码用 Shadowrocket 扫一下, 也能正常使用. ======== 开了一个分支, 本文的修改内容已提交. https://github.com/crazypeace/v2rayN-3.29-VLESS/tree/hy2 如果你有兴趣, 可以看到整个的开发过程. 本次修改记录 https://github.com/crazypeace/v2rayN-3.29-VLESS/commit/16dd2f6

v2rayN-HY2 能正常使用

图片
总功能列表在 这篇分析 里. 我们现在实现第 7 项 能正常使用 首先要在 v2rayN.exe 同目录下放一个支持 hy2 的 v2ray 内核. 写本文时, 最新版本 v5.21.0  https://github.com/v2fly/v2ray-core/releases/tag/v5.21.0 下面, 开始处理代码. 打开主窗口 .cs 文件的设计器 找到菜单项, 双击,  打开菜单项 "设定为活动服务器" 的响应函数 一路走读代码, 遇到函数就 F12 跳进去.  最终看到 V2rayConfigHandler 模块的 GenerateClientConfig 函数. 然后我们需要在 outbound 函数里面 添加 生成 hy2 内容的逻辑. 抄一下原来的 Trojan 的流程框架, 把 hy2 相关的数据处理一下. 从配置文件上看, hy2 的参数, 要写在 streamSettings 里面. 所以我们还要继续修改 boundStreamSettings 函数. 跳进去一看, 对不同的 network, 相应地生成不同的 streamSettings. 也是照着其它的逻辑框架, 实现 hy2 的处理. 为了照样子抄呢, 还要新增一个结构 Hy2Settings 看一下其它的 Settings 定义在哪里, 鼠标点在 QuicSettings 上, F12 跳转到定义. 原来在 V2rayClientConfig 模块里. 我们也照样子抄一个结构. 这个结构是和配置文件的json结构相对应的. 对比观察一下. 进一步的, 在配置文件的json结构中, hy2Settings 是 streamSettings 的子元素. 那么在 C# 的数据结构定义中, 也要给 StreamSettings 类(结构) 添加一个 Hy2Settings 数据成员(子元素). 进一步的, 请你注意到, C# 中数据成员的命名, 要和 json 结构中的 key 名称完全一致. 这是和 C# 中将 数据结构 序列化为 Json 结构的规则有关. 跑起来看看. 报了一堆错. 似乎是启动命令有问题. 继续走读代码, 找到了 V2rayHandler 模块的 V2rayStart 函数. 可以看到 p.Start(); 就是启动 v2ray.exe 程序的地方

v2rayN-HY2 [插播] network 字段忘处理了

图片
 前面我们在 设置 Hy2 窗口 的时候, 少处理了 "network": "hysteria2", 从 Vmess 窗口复制一个粘过来. 再编辑一下 可选集合 列表. 在 hy2 场景下, 应该只有 hysteria2 可选. 再补充一下 前几篇 处理过的功能. 1. 从剪贴板导入数据到窗口元素. 2. 按下 确定 按钮, 保存节点信息到主窗口.  3. 从主窗口双击节点, 打开窗口显示节点信息. ======== 开了一个分支, 本文的修改内容已提交. https://github.com/crazypeace/v2rayN-3.29-VLESS/tree/hy2 如果你有兴趣, 可以看到整个的开发过程. 本次修改记录 https://github.com/crazypeace/v2rayN-3.29-VLESS/commit/4e2ac78

v2rayN-HY2 粘贴分享链接 将节点信息保存到主窗口

图片
总功能列表在 这篇分析 里. 我们现在实现第 4 项 粘贴分享链接 将节点信息保存到主窗口 打开主窗口 .cs 文件的设计器 找到菜单项, 双击, 打开菜单项的响应函数 一路走读代码,  F12 跳转, 到了 AppConfigHandler 模块的 AddBatchServers 函数 可以看到函数里, 对各种协议都有处理. 那么, 当然的, 我们要把 hy2 的处理加进去. 刚好, 利用到前几篇写好的 AddHysteria2Server 函数 跑起来测试一下, 顺便测试一下 从主窗口双击节点, 打开窗口显示节点信息. 都正常. 进一步的, 测试一下关闭程序后,  v2rayN 软件配置文件 有没有保存节点信息. v2rayN 软件配置文件 文件名 是 guiNConfig.json 位置是和 v2rayN.exe 执行文件在同一目录. 我们用的是 Debug 方式编译的 所以生成的 v2rayN.exe 的位置是在  v2rayN-3.29-VLESS\v2rayN\bin\Debug 如果你搞不清楚, 可以用 everything.exe 全局查找一下. 看起来数据都好好的, 不错啊. 启动程序后, 测试节点信息的加载, 也正常的. 看来, 功能项 5 6 我们什么都没干, 就是正常的了. 5. 保存节点信息到 v2rayN 软件配置文件.  6. 启动程序时, 从 v2rayN 软件配置文件 加载 节点信息. ======== 开了一个分支, 本文的修改内容已提交. https://github.com/crazypeace/v2rayN-3.29-VLESS/tree/hy2 如果你有兴趣, 可以看到整个的开发过程. 本次修改记录 https://github.com/crazypeace/v2rayN-3.29-VLESS/commit/9357ef6

v2rayN-HY2 保存节点信息到主窗口

图片
总功能列表在 这篇分析 里. 我们现在实现第 2 项 保存节点信息到主窗口 打开窗口设计器, 双击 确定 按钮, 打开 点击事件 响应函数 走读代码. 看到这里的 AddShadowsocksServer 函数 调用 我们这里可是 Hy2 的功能啊. 所以要模仿 AddShadowsocksServer 函数, 写一个 AddHysteria2Server 函数. 在 AddShadowsocksServer 上面按 F12 跳转到实现, 于是跳转到了 AppConfigHandler 模块.  把 AddShadowsocksServer 整个复制, 粘贴一份克隆. 再把函数名改为 AddHysteria2Server, 然后把内容稍微修改一下.  前面几篇的修改过程中, 对 hy2 节点的关键信息还有印象吗? 在此函数中都要处理到. 跑起来试试.  不错哦, 好像 第 3 项功能 从主窗口双击节点, 打开窗口显示节点信息 也刚好没问题. ======== 开了一个分支, 本文的修改内容已提交. https://github.com/crazypeace/v2rayN-3.29-VLESS/tree/hy2 如果你有兴趣, 可以看到整个的开发过程. 本次修改记录 https://github.com/crazypeace/v2rayN-3.29-VLESS/commit/31e7acc

The Hot3 in Last 30 Days