在 OpenWrt 上修改 HTTP 流量的 UA
Go to file
2019-05-18 18:01:57 +08:00
src 除了主函数以外,都修改完毕 2019-05-18 18:01:57 +08:00
LICENSE Initial commit 2018-12-24 15:42:12 +08:00
Makefile 除了主函数以外,都修改完毕 2019-05-18 18:01:57 +08:00
README.md 除了主函数以外,都修改完毕 2019-05-18 18:01:57 +08:00

  喵喵喵,这里是一个修改 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