mirror of
https://github.com/CHN-beta/xmurp-ua.git
synced 2024-10-22 19:38:44 +08:00
在 OpenWrt 上修改 HTTP 流量的 UA
src | ||
LICENSE | ||
Makefile | ||
README.md |
喵喵喵,这里是一个修改 UA 的小模块。细致地讲,就是用在 OpenWrt 上修改发给外网 80 端口 GET 和 POST 请求的 UA 字段 为XMURP/1.0
再加很多个空格的内核模块,用来防止学校检测到使用代理(接路由器)。具体情况,百度“厦大路由”然后看我的简书文章就好了。在 WNDR4300 OpenWrt 18.06.1(内核 4.9.120)测试似乎没问题。前两天还适配了一下 4.14的内核。
如果有一些包不希望被改 UA,只要在防火墙规则里将 MARK 的最低位设置为 1 就可以了。例如:
iptables -t mangle -A PREROUTING -i br-lan_raw -j MARK --set-mark 1
这是我第一次在 GitHub 上搞自己的仓库,可能会有些小问题哈。要是有的话,请各路大佬指正。
第一层函数的思路:
- 如果没有在等待下一个分包,则检测这个包是否是HTTP的开头部分。如果是,则传递给下一层检查。
- 如果在等待下一个分包,则检测这个包是否是需要的下一个包。如果是,传递给下一层检查;如果不是,报错。
检查结果包含:
- 是否需要下一个分包。
- 是否需要保留当前包。
- 是否已经被修改(一旦被修改,就意味着是修改完成,所以肯定不需要下一个分包,也不需要保留当前包)。
- 如果被修改,是否有上一个分包。
对应的动作为:
- 如果需要下一个分包,并且保留当前包,如果这是第二个被保留的包,则出错。
- 如果需要下一个分包,并且保留当前包,如果这是第一个被保留的包,则返回 STOLEN,并等待下一个包。
- 如果需要下一个分包,并且不保留当前包,返回 ACCEPT,并且等待下一个包。
- 如果不需要下一个分包、没有被修改、没有上一个分包,则返回 ACCEPT,不等待下一个包,当前流修改完毕。
- 如果不需要下一个分包、没有被修改、有上一个分包,则返回 ACCEPT,不等待下一个包,上一个包标记后进入协议栈,当前流修改完毕。
- 如果不需要下一个分包、被修改、没有上一个分包,则修改校验和并返回 ACCEPT,当前流修改完毕。
- 如果不需要下一个分包、被修改、有上一个分包,则这个包修改校验和并返回 ACCEPT,上一个包修改校验和、标记后进入协议栈。
第二层函数的思路:
逐个字节发送给下一层。下一层的返回有这些可能:
- 如果需要下一个字节。如果匹配到 UA,