博文

编译钩子 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 观...

Debian12 用C编译 curl v8.14.1

图片
curl的 Github代码库 https://github.com/curl/curl 这是一个C语言的项目 参考 以前的C编译经验 大部分操作是一样的, 记录一下不同的地方 ./configure 的时候报错 checking for library containing psl_builtin... no configure: error: libpsl was not found 找GPT问了一下, 说要安装 apt install libpsl-dev 然后还会报错 configure: error: select TLS backend(s) or disable TLS with --without-ssl. 于是需要 ./configure --with-openssl 无错完成以后就可以 make 了 生成的 curl 在 src 目录下 * 注意 这个 curl 不是可执行文件 你可以cat看一下文件的内容 但你可以当作像可执行文件一样的去用, 只是不能挪位置. 如 ~/curl-8.14.1/src/curl -v api.myip.la

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 不过, 今天按以前的教程操作下来, 有一些小变化,  所以记录一下.

电报防广告机器人 telegram antispam bot 相关功能 查询群组内的全部成员 增加入群时间信息

图片
前言 在前面一篇博文中 , 我们的入群验证机器人增加了一个功能, 可以手动启动对某个群成员的入群验证. 解决的问题是, 当机器人离开群组(或异常)的时候, 群组有了新的成员, 但是这些群成员没有经历入群验证. 那么一个新问题就随之而来, 我怎么知道哪些成员是在机器人离开群组的时间段入群的呢? 需求 输出群成员的入群时间. 具体实践 想到我们有过一个查群成员信息的工具 https://github.com/crazypeace/tg-get-group-member 我们只要面向GPT编程, 描述我们的需求. 基于以上代码, 增加功能:  保存群组成员加入群组的时间 修改量很小. 发现得到的结果中, 入群时间是无序的. 向GPT追加需求 查询结果需要按入群时间排序 GPT给出的结果 基本功能是正确的, 但是对于保存在文件中的格式, 我有一点特别的要求. 最初这个项目是为了生成一个用户列表, 供  发言验证机器人  作为 已验证用户列表 valid.yaml 所以需要保存在文件中的格式为: 6617181826:   username: atefatman   full_name: 子 肥 7919966027:   username: crazypeace_anti_bot_bot   full_name: CZ_antibot_bot 我尝试了几种方案. 如果用 list , 保存在文件中的形式是 - id: 399932510   username: crazypeace   full_name: ǝɔ∀ǝdʎz∀ɹɔ 👽   joined_at: '2025-10-06T17:47:39.202290' - id: 661519101   username: testuser   full_name: 测试 用户   joined_at: '2025-10-07T12:11:22.501119' 如果用 OrderedDict , 保存在文件中的形式是 !!python/object/apply:collections.OrderedDict - - - 1716213463     - username...

The Hot3 in Last 7 Days

搭 Docker版 Sub-Store 带 http-meta 实现 集合订阅 测延迟 排序 筛选 生成新订阅 定时任务上传Gist

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