各位大佬指点下字符串模式查找问题

2022-04-21 17:43:31 +08:00
 bbmike253455

背景

使用虚拟机+OpenWrt+Menthust 解决校园网认证问题,但是会有共享网络检测问题。目前现象是使用 80 端口很大概率被封,用 IPtables 禁止 80 端口的数据出 WALN 口就没事,分析是根据 HTTP 的 User-Agent 请求头判定的,但是现在挺多 APP 还用了 80 端口加速视频、图片什么的。目前找到了两种方案,分别是xmurp-uaUA2F,前者是内核修改,后者是用户态修改方案,但是不好使,访问 HTTP 页面,UA 并没修改。所以我参考他们的自己写了一个,同时也学习下 C 语言及 Linux 方面的东西.

方案

我采用的是第二个方案,设置规则,让符合条件的包交给用户态程序处理,模块是 NFQUEUE 。现在进度是交叉编译环境、测试环境都准备好了,代码进行到在 TCP payload 中查找 User-agent 并替换,想请问下那种查找算法效率高些?以下是我已进行的分析:

查找算法我感觉Rabin-Karp Algorithm应该合适,hh

问题是:

1498 次点击
所在节点    程序员
4 条回复
billlee
2022-04-21 20:31:11 +08:00
我以前是做防火墙 & WAF 的,其实

1. 直接搜索是很快的,商用防火墙可以在内核态拿着上万条正则扫万兆以太网的全部流量。
2. 需要处理跨包场景
3. 不能修改数据长度,否则后面的包序列号都会变,所有后续包都需要重写。
4. HTTP 的各种高级特性处理起来确实很复杂,所以 WAF 一般是在用户空间做的。

所以我还是建议用 TPROXY 抓到用户空间来用代理服务器重写 User-Agent 头
bbmike253455
2022-04-21 21:07:16 +08:00
@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
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 的数据,内核可能会合成一个包发出去。
lingling47
2022-05-31 15:08:11 +08:00
不过话说如果只是操作 ua nginx 反向代理好像可以实现

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848407

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX