使用虚拟机+OpenWrt+Menthust 解决校园网认证问题,但是会有共享网络检测问题。目前现象是使用 80 端口很大概率被封,用 IPtables 禁止 80 端口的数据出 WALN 口就没事,分析是根据 HTTP 的 User-Agent 请求头判定的,但是现在挺多 APP 还用了 80 端口加速视频、图片什么的。目前找到了两种方案,分别是xmurp-ua和UA2F,前者是内核修改,后者是用户态修改方案,但是不好使,访问 HTTP 页面,UA 并没修改。所以我参考他们的自己写了一个,同时也学习下 C 语言及 Linux 方面的东西.
我采用的是第二个方案,设置规则,让符合条件的包交给用户态程序处理,模块是 NFQUEUE 。现在进度是交叉编译环境、测试环境都准备好了,代码进行到在 TCP payload 中查找 User-agent 并替换,想请问下那种查找算法效率高些?以下是我已进行的分析:
User-Agent
字段却在前一个包,搜索不出来,第二个包好像不太好修改?修改成统一 UA 可能增大 TCP payload 的数据,导致 IP 层分片?感觉去掉各平台的标识就行了,比如 Android 、IOS 、Win 等标识不同时出现。考虑分片增加复杂度了,感觉这种情况可以不考虑,账号拉黑应该有个阈值的,不会有这么多数据包巧合。查找算法我感觉Rabin-Karp Algorithm
应该合适,hh
问题是:
1
billlee 2022-04-21 20:31:11 +08:00
我以前是做防火墙 & WAF 的,其实
1. 直接搜索是很快的,商用防火墙可以在内核态拿着上万条正则扫万兆以太网的全部流量。 2. 需要处理跨包场景 3. 不能修改数据长度,否则后面的包序列号都会变,所有后续包都需要重写。 4. HTTP 的各种高级特性处理起来确实很复杂,所以 WAF 一般是在用户空间做的。 所以我还是建议用 TPROXY 抓到用户空间来用代理服务器重写 User-Agent 头 |
2
bbmike253455 OP @billlee 多谢大佬!那我就用暴力的了。我准备就替换括号里面的内容,选一个最短的替换,空余位置补空格,真容量不够的话,那就 UA 缺失算了,只要不识别出来移动设备就行了
代理服务器已经有解决方案了,Privoxy ,我已经用上了,就是有时候会断流、卡顿。 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36 |
3
bfdh 2022-04-22 11:59:53 +08:00
@billlee
1. 直接搜索是很快的,商用防火墙可以在内核态拿着上万条正则扫万兆以太网的全部流量。 这个主要看 CPU 性能,我们在家用路由器上做过类似操作,性能损失很明显。 来回答下楼主的问题 如果只是想实现功能,nginx 反代有可能能满足楼主需求,不过这个我没有仔细研究过,只是提出来,需要楼主自行查证。 如果是自己写代码实现,应该有下面这些需要留意 1 、HTTP 1.x 也是可以一条 tcp 连接承载多个 http 请求的,关键字 keepalive ,这种情况也是需要持续处理后续数据的。 2 、可以考虑使用类似反代的思路,这样的话,UA 跨包和因为修改 UA 导致的数据包长度变化问题就迎刃而解了。 3 、UA 定位建议按协议进行分析,暴力查找感觉性能还是低了些,而且本来你也是抱着一部分学习的目的。 4 、某些应用的服务器会检测 UA ,修改 UA 可能会导致功能异常,这种需要特殊处理。 最后再提供另一个思路。 不知道你们校园网 UA 检测对于 http 头跨包的情况处理到了什么程度,可以试试将 HTTP 头逐个字节发送,看看是不是能被检测到。逐个字节发送需要在网络层抓包确认,并不只是在代码里一次 write 一个字节,多次 write 的数据,内核可能会合成一个包发出去。 |
4
lingling47 2022-05-31 15:08:11 +08:00
不过话说如果只是操作 ua nginx 反向代理好像可以实现
|