博文

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

xray的IPv4优先 IPv6优先行为受 gai.conf 控制?

图片
前言 群友反馈在Deiban13下不能设置IPv4优先 通过进一步的交流, 群友的意思是 sing-box 向外访问, 无法通过 gai.conf 来设置是 IPv4优先 还是 IPv6优先 群友用的是fakeip的模式, 翻墙客户端发给梯子的数据包中只有域名, 没有IP. 上一篇我们测试了sing-box , 这次我们再测试一下 xray 技术基础 用 curl socks5h 模拟翻墙客户端 fakeip 行为 编译getaddrinfo钩子 钩Go程序 编译xray https://github.com/XTLS/Xray-core#one-line-compilation 准备测试环境 搭建一个简单的xray服务端 官方安装脚本  bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install 把service自动启动的xray关掉 systemctl stop xray  配置文件 nano /usr/local/etc/xray/test-config.json {   "log": {     "access": "/var/log/xray/test-access.log",     "error": "/var/log/xray/test-error.log",     "loglevel": "debug"   },   "inbounds": [     {       "listen":"127.0.0.1",       "port":1080,       "protocol":"socks"     }   ],   "outbounds": [     {       "protocol": "freedom",       "tag": "di...

sing-box的IPv4优先 IPv6优先行为受 gai.conf 控制?

图片
前言 群友反馈在Deiban13下不能设置IPv4优先 通过进一步的交流, 群友的意思是 sing-box 向外访问, 无法通过 gai.conf 来设置是 IPv4优先 还是 IPv6优先 群友用的是fakeip的模式, 翻墙客户端发给梯子的数据包中只有域名, 没有IP. 技术基础 用 curl socks5h 模拟翻墙客户端 fakeip 行为 编译getaddrinfo钩子 钩Go程序 编译sing-box https://sing-box.sagernet.org/zh/installation/build-from-source/ 准备测试环境 搭建一个简单的sing-box服务端 官方安装脚本  curl -fsSL https://sing-box.app/install.sh | sh 配置文件 nano /etc/sing-box/test-config.json {   "log": {     "level": "debug",     "output": "test-box.log",     "timestamp": true   },   "inbounds": [     {       "type": "socks",       "tag": "socks-in",       "listen": "127.0.0.1",       "listen_port": 1080     }   ],   "outbounds": [     {       "type": "direct"     }   ] } 命令行前台运行sing-box(不能Ctrl+C中断, 就这么放着) /usr/bin/sing-box -D /var/lib/sing-box -c /etc/sing-box/test-config.json run 新开一个SSH终端窗口. cur...

编译getaddrinfo钩子 LD_PRELOAD加载 钩Python程序 钩Go程序 GODEBUG=netdns=cgo

图片
上一篇, 我们用钩子拦截系统接口调用的方法验证某个程序是否调用了getaddrinfo系统接口. 这样的钩子技术可以应用在很多其它情况下. 并不会因为钩子的源代码是C, 就只能钩C写的程序 (curl 是 C写的). 编译钩子请参考 上一篇 , 略. 钩子文件是 /root/ hook_getaddrinfo.so 钩 Python 程序 感谢 Debian中文群的群友的 python 代码  https://t.me/c/1039975886/766756 python3 -c 'import sys, socket; [print(res) for res in socket.getaddrinfo(sys.argv[1], int(sys.argv[2] if len(sys.argv) > 2 else 80))]' api.myip.la 上面的代码是python调用系统 getaddrinfo. 我们在开头加上钩子, 得到 LD_PRELOAD=/root/ hook_getaddrinfo.so  python3 -c 'import sys, socket; [print(res) for res in socket.getaddrinfo(sys.argv[1], int(sys.argv[2] if len(sys.argv) > 2 else 80))]' api.myip.la 日志如下 钩 Go 程序 让GPT写一个Go程序, 实现简单的功能: 访问一个域名, 打印HTTP结果.  看起来就像curl 代码如下,  gurl.go package main import (   "fmt"   "io/ioutil"   "log"   "net/http"   "os"   "strings" // 导入 strings 包用于字符串操作   "time" ) func main() {   // --- 1. 处理命令行参数 ---   if len(os.Args) < 2 {     log.Fatalf("❌ 缺少参数。用法: gur...

编译钩子 LD_PRELOAD加载 拦截系统接口调用getaddrinfo 验证socks5和socks5h的区别

图片
前言 群友反馈在Deiban13下不能设置IPv4优先 分析 感谢 Debian中文群的群友 提供信息  https://t.me/c/1039975886/766705 感谢233群的群友提供信息  https://t.me/tg233boy/1228524 我们知道了, gai.conf 控制的是 getaddrinfo 系统接口的行为 /etc/gai.conf 怎么证明某个程序调用了 getaddrinfo(被gai.conf控制) 呢?  钩子拦截系统接口调用 感谢Debian中文群的群友的灵感  https://t.me/c/1039975886/766779 gdb调试我不会, 但是我会编译啊. 我问了一下GPT, getaddrinfo的库是 libc.so.6 可以在这里面查找到 getaddrinfo 的符号, 如 nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep getaddrinfo 我本来想找到源码自己编译一份 libc.so.6 文件. 思路是不影响原有的getaddrinfo功能, 只是在命令行多打印一份日志. 这样就可以确定某个软件 是不是 调用了 getaddrinfo , 于是就受到 gai.conf 的控制 (IPv4优先 / IPv6优先). 我拿这个想法去问GPT. 回答超出我的预期. GPT告诉我,  1. 最好不要替换系统库, 因为会影响整个系统. 2. 有办法可以针对 某个程序 挂个钩子. 在钩子 里监控 调用系统 getaddrinfo 的行为, 然后打印日志. 然后在钩子里原样 调用系统原本的 getaddrinfo, 不影响实际行为. 相关代码如下, 例如  hook_getaddrinfo.c #define _GNU_SOURCE #include <stdio.h> #include <dlfcn.h> #include <netdb.h> int getaddrinfo(const char *node, const char *service,                 con...

curl socks5h 模拟翻墙客户端 fakeip 行为

图片
前言 群友反馈在Deiban13下不能设置IPv4优先 通过进一步的交流, 群友的意思是 sing-box 向外访问, 无法通过 gai.conf 来设置是 IPv4优先 还是 IPv6优先 群友用的是fakeip的模式, 翻墙客户端发给梯子的数据包中只有域名, 没有IP. 需求 如果自己搭全套测试环境挺麻烦的. 而且自己到VPS之间的网络如果不稳定的话, 影响测试效率. 那么, 我们怎么在VPS上模拟这个fakeip行为呢? 问GPT 在"翻墙"领域, 有一种客户端 模式叫 fakeip  在这种模式下, 最终从客户端 发往服务端的数据包里面只有域名, 没有IP.  我需要在linux命令行模拟 这样的行为, 我可以用 curl 工具做到吗? 答案是使用 socks5h curl -x socks5h://proxy.example.com:1080 https://www.example.com/ 实践 sing-box 搭建一个简单的sing-box服务端 官方安装脚本  curl -fsSL https://sing-box.app/install.sh | sh 配置文件 nano /etc/sing-box/config.json {   "log": {     "level": "debug",     "output": "box.log",     "timestamp": true   },   "inbounds": [     {       "type": "socks",       "tag": "socks-in",       "listen": "127.0.0.1",       "listen_port": 1080     }   ],   "outbounds": [     {       "type": "direct"   ...

Debian13 IPv4优先 IPv6优先 curl api.myip.la

图片
需求 群友反馈在Deiban13下不能设置IPv4优先 1. 核实问题 a. 判断是否Debian13 cat /etc/os-release b. 判断是否同时有 ipv4 和 ipv6 出站 curl -4 api.myip.la  curl -6 api.myip.la  c. 判断当前是什么出站优先 curl api.myip.la  d. 设置为 IPv4 优先 bash <(curl -sL https://raw.githubusercontent.com/crazypeace/warp.sh/main/ipv4v6.sh) 4 * 本质上是 echo "precedence ::ffff:0:0/96  100" >> /etc/gai.conf e. 检测效果 curl api.myip.la  Debian12 环境下 curl 返回 IPv4 Debian13 环境下 curl 返回 IPv6 2. curl的版本不同 在与各大GPT交流一番后, GPT提示我用 curl -v 来获取更详细的信息. curl -v api.myip.la  可以发现  Debian12 使用的是 curl/7.88.1 Debian13 使用的是 curl/8.14.1 并且 Debian13 的 curl/8.14.1 在一开始多了2行 解析IP的结果 我们可以尝试在 Debian12 环境下测试 curl/8.14.1 3. Debian12 用C编译 curl v8.14.1 https://zelikk.blogspot.com/2025/10/debian12-c-curl-v8141.html 4. Debian12环境下测试 curl/8.14.1  Debian12 的 curl/8.14.1 的结果是 返回 IPv6  5. Debian13环境下测试 curl/7.88.1 可以看到 Debian13 的 curl/7.88.1 的结果是返回 IPv4 所以可以确定是 代码的变化导致结果发生了变化 . 而不是Debian12与13的环境差异. 6. 从哪个版本发生的变化 我们可以编译不同版本的 curl 观...

AutoHotKey 实现 CapsLock 一键双用 长按=Ctrl 短按=Esc

图片
逛B站的时候看到 <告别腱鞘炎!Vim 党必看! CapsLock 一键双用:Ctrl + Esc 全搞定> 目的是 长按CapsLock实现 Ctrl 的效果, 短按CapsLock实现 Esc 的效果 里面的AutoHotKey代码如下: SendMode Input SetWorkingDir %A_ScriptDir% SetCapsLockState, AlwaysOff CapsLock::   Send {Ctrl Down}   KeyWait, CapsLock   Send {Ctrl Up}      if (A_PriorKey = "CapsLock")     Send {Esc} return 走读代码就能发现问题, 不管是长按还是短按, 都会发出 Ctrl Down 和 Ctrl Up 信号 在大部分环境下, 这个多余的 Ctrl 信号没关系, 但是如果某个环境对这个多余的Ctrl信号有关系的话, ... 我想到的是, 应该加个延迟来判断是短按还是长按. 准备面向GPT开发的时候, 我想到, 不如给GPT一个开放的问题. 分析这段代码有什么问题, 可以怎样改进 结果超出我的期望. 1. 首先来看加延迟的方案 SendMode Input SetWorkingDir %A_ScriptDir% SetCapsLockState, AlwaysOff CapsLock::     KeyWait, CapsLock, T0.2  ; 等待释放 等待0.2秒          if (ErrorLevel)  { ; 长按超过0.2秒         Send {Ctrl Down}         KeyWait, CapsLock  ; 等待释放         Send {Ctrl Up}     }     else  { ; 轻按(短于0.2秒)   ...

丐版VPS装Xfce桌面 Firefox-ESR 支持VNC远程桌面

图片
前言 今天突然想试玩<逃离鸭科夫>(Escape From Duckov) 但是Telegram的资源频道里还没有. https://t.me/maopajia 所以就到网上搜了搜, 有磁力资源 magnet:?xt=urn:btih:de3270d5e38d84c4c79732c86c066af4f4a8180b 也有网盘下载 https://gofile.io/d/GEsP4C 磁力下载没什么说的, 我在VPS上搭建了离线下载系统. https://zelikk.blogspot.com/2022/01/vmess-websocket-tls-caddy-nginx-aria2-ariang-filebrowser.html 网盘下载嘛, 我以前也尝试过. https://zelikk.blogspot.com/2019/01/gcp-vps-xfce-vnc.html 不过, 今天按以前的教程操作下来, 有一些小变化,  所以记录一下.

怎么把梯子分享给长辈

图片
思路 1. 同时搭建多种协议 2. 创建订阅链接 3. 用办法保证墙内访问订阅链接 4. 选用解压即用的翻墙客户端 5. 配置完成后打压缩包 6. 告诉长辈   a. 解压缩包   b. 运行可执行文件   c. 更新订阅的操作   d. 切换节点的操作

AutoHotKey将剪贴板转换为键盘输入用于VNC

图片
看到有人求助 VNC 中无法粘贴. 在 google 上搜索了一下, 找到一个这样的结果 https://ardalis.com/use-autohotkey-to-paste-text-as-typing/ #NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn  ; Enable warnings to assist with detecting common errors. SendMode Event  ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory. setkeydelay 70 ^+v::GoTo, CMD CMD: ;Send {Raw}%Clipboard% vText := Clipboard Clipboard := vText Loop Parse, vText, % "`n", % "`r" {     Send, % "{Text}" A_LoopField     Send, % "+{Enter}" } return 试用了一下, 效果不对. 但是 AutoHotKey 这个思路是对的. 所以让GPT写了一个. #F3:: ; 快速键 win + f3     TextToSend := Clipboard     ; 检查剪贴板是否为空     if (TextToSend = "") {         MsgBox, clipboard empty         Return     }          DelayMs := 500 ; 设置您想要的延迟时间(毫秒...

不换行空格NBSP造成Linux执行命令时出错

图片
今天在我自己的博客文章里面复制脚本命令, 在执行时报奇怪的错误. 查了半天, 发现是空格的问题. 发现脚本执行出问题后, 我先是目测仔细检查, 应该没问题. 然后照着文章手打命令, 能正常执行.  但, 就是直接复制出来执行会报错. 首先是放在我常用的 notepad3 里面对比, 发现有个"空格"似乎有点不"正常". 我换了个编辑器 notepad++ 后,  可以看到那个奇怪的空格是 NBSP 不换行空格 Non-Breaking Space 原因找到了, 但是不确定我的博客文章还有哪些页面有这个问题. 我试过各种搜索方法, 都是把 NBSP 当作空格理解. 而我实在没办法每篇博文都翻一遍. 所以, 如果你遇到了这个问题, 欢迎反馈给我. 可以在我的 github 项目的 issue 区留言, 也可以反馈给我的Telegram https://t.me/+ISuvkzFGZPBhMzE1 至于根本原因, 我搞不清楚. 从我正常执行的linux命令, 到编辑blogger文章发布. 是哪个步骤把空格转换成了NBSP. 最奇怪的是, 不是每一个空格都变成了NBSP. 如果是 bash 后面的空格变成了NBSP, 有可能是报 bash 相关的错误. 如果是 curl 后面的空格变成了NBSP, 有可能是报 curl 相关的错误. :(

The Hot3 in Last 7 Days

极简一键脚本 搭NaiveProxy梯子 自定义端口 与Caddy V2前置的VLESS/Vmess V2Ray共存 可开CDN

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