博文

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

Hysteria2 服务端自签证书 V2rayN客户端指定证书指纹 pinSHA256 证书锁定 Certificate Pinning

图片
前言 上一篇我们摸索清楚了 V2ray的客户端配置文件应该怎么写 现在我们在v2rayN的客户端中实现. * 啊, 上一次改动 v2rayN-3.29-VLESS 还是 去年... Hy2 节点的窗体 添加 label 和 textBox (txtPinSHA256) 保存按钮的方法, 添加对 txtPinSHA256 的处理. 相应的 NodeItem 类要添加数据成员. 现在可以测试一下添加节点保存到 guiNConfig.json 文件了. OK. 接下来修改加载 Hy2 节点窗体 AddHy2ServerForm.cs  BindingServer() OK 粘贴生成节点  AddHy2ServerForm.cs ImportConfig() public static NodeItem ImportFromClipboardConfig(string clipboardData, out string msg) OK 生成v2ray配置文件参数 private static int outbound(V2rayNappConfig appConfig, ref V2rayClientConfig v2rayConfig)    private static int boundStreamSettings(V2rayNappConfig appConfig, string iobound, ref StreamSettings streamSettings) 分析得到 public class TlsSettings 定义增加 pinSHA256 这时要参考 V2ray 的文档, 定义成 List<string> 数据成员名也与文档一致 pinnedPeerCertificateChainSha256 再修改 boundStreamSettings() 函数的实现 public class V2rayNappConfig  增加一个函数 public string pinSHA256() 照着上面的 allowInsecure() 的样子写 测试 生成 客户端配置文件, OK 字段原样写入了. 接下来处理 he...

向外访问网络行为次序随机的场景下 预设网络资源 预设替代命令

图片
前言 上一篇 我们处理了 向外访问网络行为次序固定的场景下 预设网络资源 预设替代命令 现在我们来处理 次序随机的场景 典型例子就是 233脚本. https://crazypeace.eu.org/2025/11/fake-curl-wget-sh.html 我们先在无预设命令的条件下, 执行一遍安装过程. cd fake-curl-wget-sh-main source fake-curl-wget-v2.sh cd bash install-233.sh 然后分析日志. 需求 编辑 __fake_net_common.sh , 添加预设命令. 因为网络访问的次序是随机的, 所以我们只能从网络资源的特征入手. 我们要对 wget --no-check-certificate -t 3 -q -c https://github.com/233boy/xray/releases/latest/download/code.zip -O /tmp/tmp.dO84swIzMs/tmpsh  设置预设命令 cp /root/code.zip /tmp/tmp.dO84swIzMs/tmpsh  结合上一篇的 第几个参数 的经验  再问问GPT 怎么在shell脚本中实现匹配关键字. 得到 if printf '%s\n' "$@" | grep -qE '^http.*code\.zip$'; then     # 有参数是 http开头 code.zip结尾     cp /root/code.zip "$8"     has_preset=1 fi 同样的思路, 处理 xray-linux-64.zip, 处理 jq-linux-amd64 再来处理 wget --no-check-certificate -4 -qO- https://one.one.one.one/cdn-cgi/trace 我们要先判断 包含 one.one.one.one 这个特征, 现进行替换. 得到 if printf '%s\n' "$@" | grep -qF 'one.one.one.one'; then   # 有参数是 包含one...

向外访问网络行为次序固定的场景下 预设网络资源 预设替代命令

图片
前言 上一篇 我们实现了 向外访问网络时暂停 使用者进行替代操作 对于这种向外访问网络行为次序固定的场景下  我们可以预设网络资源 预设替代命令 预设网络资源 刚好利用上一篇我们操作过的环境. * 如果你是从头来的话, 基本上就是把上一篇教程操作一遍. 预设替代命令 打开上一篇的操作日志. * Xshell 可以自动记录日志 参考上一篇操作过程中我们输入的替代命令, 设置到 __fake_net_common.sh 中 如, 序号 1 序号 3 序号 5  我们遇到了一个随机字符的问题, 不能写死预设命令. 我们可以用指定第几个参数的方法. 问问GPT 分析下面这样的命令 curl -L -q --retry 5 --retry-delay 10 --retry-max-time 60 -x '' -sSfLo /tmp/tmp.eNF5Sld6Wm -H Accept:\ application/vnd.github.v3+json https://api.github.com/repos/XTLS/Xray-core/releases/latest  "$cmd" 是 curl "$@" 是curl后面所有的参数 我需要用指定第几个参数的方法 提取其中的 /tmp/tmp.eNF5Sld6Wm GPT帮我数了数, 用 "${13}" 的方法引用. __fake_net_common.sh 修改完后. 试试 source fake-curl-wget-v2.sh bash install.sh 有问题, 会卡死. 检查了一下, 是因为在 case 1) 的里面写了 curl. 这里并没有使用系统原本的curl, 而是调用了假的curl. 我们借用之前的经验.  先去掉假的PATH, 执行curl之后, 再恢复假的PATH. 再试试 source fake-curl-wget-v2.sh bash install.sh 还是有问题. 在 cp /root/xxx  yyy 的部分, 报错非法参数. 那我们就把参数 echo 出来. 再根据日志的打印, 对比 curl 原始命令的参数列表, 发现应该用 "${12}" 用这种方式调试完, 就正常了. 小优化 在 /tmp/f...

多shell脚本嵌套调用的环境 向外访问网络时暂停 使用者进行替代操作

图片
前言 上一篇我们将 向外访问网络时暂停 使用者进行替代操作 的方案应用在了 安装233boy 脚本上面 进一步的, 能不能继续拓展应用范围, 用在, 比如, 我自己的 极简一键脚本中? bash <(curl -L https://github.com/crazypeace/xray-vless-reality/raw/main/install.sh) 试试 发现有问题. 我的脚本调用了xray官方安装脚本, 在这个嵌套调用的场景下, 被嵌套调用的脚本里的网络访问就没有被抓到. 去问了好多个GPT, 回答了一堆什么线程啊, 进程啊, 环境啊, 继承啊, ...  给了我几个解决方案, 试了一下也是不行. 说明回答的那些理论就是狗屁. 改进 那就来个根本的方案, 在系统PATH中安插假的 curl 和 wget. 我们上个方案里的 curl, wget, __fake_net_common 函数, 都变成可执行文件, 放到 PATH里去. 逻辑都是现成的, 不用大改. 最终我们得到这样的 4 个脚本 fake-curl-wget-v2.sh #!/usr/bin/env bash # ========================================== # 拦截 curl 和 wget 调用,用于调试/离线测试 # ========================================== # 在PATH中设置假命令 curl wget mkdir -p /tmp/fakebin if [[ ":$PATH:" != *:/tmp/fakebin:* ]]; then   export PATH="/tmp/fakebin:$PATH" fi # 清理调用记数文件 rm /tmp/fakebin/* # 放入假命令文件 cp __fake_net_common.sh /tmp/fakebin/fake_net_common chmod +x $_ cp __fake_curl.sh /tmp/fakebin/curl chmod +x $_ cp __fake_wget.sh /tmp/fakebin/wget chmod +x $_ # -----------------------------...

分析 xray 代码 DNS解析

图片
书接上文, 我们通过测试, 知道了xray在一定的条件下会调用系统的getaddrinfo 分析 Xray 的代码, 在哪里进行DNS解析 分析 xray 日志 [Debug] app/log: Logger started [Debug] app/proxyman/inbound: creating stream worker on 127.0.0.1:1080 [Info] transport/internet/tcp: listening TCP on 127.0.0.1:1080 [Warning] core: Xray 25.10.15 started [Info] [304315699] proxy/socks: TCP Connect request to tcp:api.myip.la:80 [Info] [304315699] app/dispatcher: default route for tcp:api.myip.la:80 [Info] [304315699] transport/internet/tcp:  dialing TCP to  tcp:api.myip.la:80 [Debug] [304315699] transport/internet: dialing to tcp:api.myip.la:80 [Info] [304315699] proxy/freedom: connection opened to tcp:api.myip.la:80, local endpoint 198.23.254.247:57912, remote endpoint 149.28.31.24:80 [Info] [304315699] proxy: CopyRawConn splice 可以发现一些关键词, 比如 dialing TCP to   我们打开xray源码 https://github. dev /XTLS/Xray-core/ * 对, 就是把 Xray 项目的 github.com 改为 .dev  ** 当然, 我这是图省事的操作. 你愿意下载源码再用M$ VS打开也是一样的. 搜索  dialing TCP to   这就是xray打印日志的地方了. https:...

Telethon 和 Python Telegram Bot 库 读取和设置群组的用户权限 Music和Voice Messages 即audio和voice_notes 有个坑Bug

图片
环境说明 Telegram界面设置群组的默认权限. 进群验证机器人 (tg-join-group-exam-bot.py) 在新成员通过验证后, 会在 Exceptions 里面设置权限. 清除 Exceptions 工具 (tg-clean-exceptions.py) 会读取群组的默认权限, 再读取 Exceptions 中某个用户的权限. 测试过程 Case 1.  群组默认权限  music - Close voice messages - Close tg-join-group-exam-bot.py 设置 permission can_send_audios=False, can_send_voice_notes=False, 新成员通过验证后, 在Exceptions中的记录是这样的, 符合期望 tg-clean-exceptions.py default_rights = entity.default_banned_rights 读出来的是什么 rights = getattr(p.participant, 'banned_rights', None)  读出来的是什么 可以看到默认权限是对的. 这个属性是 default_banned_rights. 所以 Ture 表示 Close. 而读取的 Exceptions 里面, 用户的权限是 错的 . False 表示 Open. Case 2.  群组默认权限  music - Close voice messages - Close tg-join-group-exam-bot.py 设置 permission can_send_audios=True,         (意思是 Open) can_send_voice_notes=True,        (意思是 Open) 新成员通过验证后, 在Exceptions中的记录是这样的,  不符合预期 . 因为上面的代码中设定的 permission 是 True, 应该是有这两个权限的. 而 telegram 界面上显示是没有.  tg-clean-exception...

KV-woker 纯练手项目 保护 _ 开头的 Key VS code 重构 JS 代码 提取代码为函数

图片
KV-woker 项目准备实现的功能列表见此: https://crazypeace.eu.org/2024/12/kv-woker-1.html 今天实现: 保护 _ 开头的 KV对. 因为我们的目标是把配置项都放到 KV 中保存. 按目前的设计, 需要把理更多的配置项的 KV 放到 protect_keylist 中. 如果未来系统有配置项的扩充, 那么就要记得在 protect_keylist 中添加, 这是不优雅的.  我们可以约定, 配置项在 KV 中都以 _ 开头保存. 这一点和自动生成短链的方法也不冲突, 自动生成短链的字符中不含有 _ 符号. 本项目目前保护两个KV, _admin_pwd_ 和 _user_pwd_ , 不允许用户 修改, 删除, 查询. 目前的实现, 是设置了一个数组 protect_keylist 在业务逻辑中, 使用判断数组中是否有元素的方式 List.includes(key) , 来判断是否是属于需要保护的key. if (protect_keylist.includes(req_key)) 这一功能的效果就是: https://newkvdb.crazypeace.workers.dev/_user_pwd_ 显示404 https://newkvdb.crazypeace.workers.dev/_admin_pwd_  显示404 而且在  https://newkvdb.crazypeace.workers.dev/kvdbkvdb LoadKV, 是查询不到 _admin_pwd_ 和 _user_pwd_ 的 value 的 第 1 步 先将 if (protect_keylist.includes(req_key)) 这个判断重构为一个函数 鼠标拖选 "protect_keylist.includes(req_key)" , 右键, "Refactor...", "Extract to function in global scope",  输入新函数的名字, "checkProtectKey" 回车Enter确认 你会发现, 之前选中的文字被替换为了一个函数调用 而文件的末尾, 新增了一个函数, 函数内容就是你之前选中的语句...

The Hot3 in Last 7 Days

酒馆SillyTavern 玩英文角色卡 也能以中文输出 设置世界书Lorebooks

Woiden IPv6 VPS 搭 V2ray 梯子 VLESS+Websocket+TLS 模式 免费 白嫖 全程手机操作 2022-4-19

极简一键脚本 搭Xray梯子 VLESS + Reality + xTLS 偷 x25519 证书