恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17064|回复: 26

使用OpenWrt路由自动修改http请求的UserAgent来躲过移动设备检测

[复制链接]
发表于 2017-8-10 20:08 | 显示全部楼层 |阅读模式
本帖最后由 枫谷剑仙 于 2018-12-13 17:45 编辑

我之前发了篇 【求助】路由如何自动修改http请求的UserAgent? ,现在我自己将这个问题解决了,现在将方法分享出来给大家。

断网的问题
我所在的单位上网是需要自己交钱的,一直以来都是按照流量收费,我以前一个月可能需要花50+还不敢使劲用。
可是上个月系统升级后出现了一个包月套餐(限速1MB/S),我当然是喜出望外的立即办理了。
不过既然人家都说了是防代理,那么肯定也就有技术检测不让你共享网络。


实际测试后发现,只要将网络共享成热点让手机上网,网就会被踢掉。又需要重新登陆,且中间还有时间间隔。


猜测检测手段
因为是网页认证,根本不需要用客户端,所以对手机的检测肯定不是在前端而是上级路由对流量进行异常检测。尝试将虚拟机的网络共享给手机也会断网,也映证了这一观点。
后来继续研究,发现使用路由器共享给多台电脑都没有被踢掉,因此猜测:后台只是简单的判断了是否是手机流量,发现有手机流量通过就对账号断网。电脑上打开安卓模拟器,也很快就断网了,映证了这一观点。
于是提出猜想:上级路由能简单区分流量来自电脑还是手机,是对http流量中的"User-Agent"(后面简称UA)这一信息进行了判断,发现来自手机的UA就进行断网。
验证:
  • 电脑火狐浏览器用扩展修改UA为“Android”进行访问,发生断网。
  • 手机用电脑上的Fidder代理并用自定义规则修改UA,替换掉“Android”字符串,不断网。


1、Fidder调试测试关键词
下载Fidder
此步不需要修改路由器,使用方便,请先在此步找出会被检测到的关键词
▼Fidder打开允许远程设备连接

▼手机WLAN使用Fidder代理

于是先附上Fidder的规则,在FidderScript的“OnBeforeRequest”函数内加入如下代码之一(因为我只有安卓手机,所以苹果的我就不管了)
一行式简单替换:
  1. oSession.oRequest["User-Agent"] = oSession.oRequest["User-Agent"].Replace("Android","Windows");
复制代码
多行判断修改:适合有更多需要替换的字符
  1. var nUA = oSession.oRequest["User-Agent"];
  2. nUA = nUA.Replace("Android","Windows");
  3. nUA = nUA.Replace("iOS","Windows");
  4. oSession.oRequest["User-Agent"] = nUA;
复制代码
▼我的代码

▼手机请求替换结果


2、使用路由上的代理软件修改UA
那么,我现在是可以让手机上网了,但是这样我必须
  • 开启电脑
  • 运行Fidder
  • 设置WLAN代理
三步都不可或缺,对于其他人想连WiFi就会比较麻烦。

那么有没有可以不用开电脑,甚至不需要配置WLAN代理就能直接让手机上网的办法呢?
于是我想到了家里买的OpenWrt,作为Linux系统,有什么奇奇怪怪东西都是我这个菜鸟不能预料的。
于是我查找了一下,没有特别合适我的教程,基本都是研究如何兲朝上网的,于是我只能自己动手。终于还是研究出来了

因为我的路由买来当初就是预装的明月固件,因此后来全都用的明月版OpenWrt,因此以这个为例。

以Privoxy软件为例
测试了多个代理软件后,发现只有Privoxy的手册我稍微看懂一点并使用成功。
首先刷新软件包

或者使用SSH连接输入shell命令
  1. opkg update
复制代码
然后安装“privoxy”(主程序)、“luci-app-privoxy”(用户界面)、“luci-i18n-privoxy-zh-cn”(用户界面中文翻译,这个我的AR4300 OpenWrt系统没有,只能看英文的,刚买的WRT1900AC LEDE系统有)
如果你的路由器没有,那我也没办法,我也不会搞路由器上的东西。

或者使用SSH连接输入shell命令
  1. opkg install privoxy
  2. opkg install luci-app-privoxy
  3. opkg install luci-i18n-privoxy-zh-cn
复制代码
现在我们可以尝试启动代理了

访问控制里,设置监听地址为路由器IP和代理端口,允许访问地址则是同一网段,最后的数字写0,并跟上“/24”,代表0-255

保存应用后,手机就可以直接填写这个代理地址了,但是目前我们还没有对流量的User-Agent进行修改。

因为手机上一些软件有自己独特的UA,比如QQ、微信,所以直接硬性的将UA修改为固定值或者删除,都会导致一些应用出错,所以我的解决办法是将 Android 关键词部分替换为 Windows

添加自定义的Action和Filter文件


然后用WinSCP连接进入“/etc/privoxy”修改这两个文件


user.action”最后加上对http header进行修改的动作
  1. # 替换Header里的安卓
  2. {+client-header-filter{androidfilter}}
  3. /
复制代码
user.filter”最后加上正则替换代码
  1. #把“Android”和“iPxxxx”替换为“Windows NT”的filter
  2. CLIENT-HEADER-FILTER: androidfilter Replace all "Android" with "Windows"

  3. s@\b(Android|iP\w+)\b@Windows@ig
复制代码
▼如图

他们具体的意义请自行查阅 privoxy用户手册,我也看不大懂,反正这代码勉强能用。

请在此步确保代码成功修改UA
设置Privoxy前置代理为Fidder,就可以在Fidder看到,通过Privoxy访问的http流量的UA里的Android被换成了Windows。也可以用其他你所知道的方式来测试。
▼主动使用Privoxy代理进行测试

▼UA替换结果


3、设置透明代理,使所有流量用Privoxy修改UA
下一步就是如何让所有设备自动进入代理了。我使用 iptables 进行流量转发。
首先需要勾选杂项中的“Accept intercepted requests”,不然iptables的转发会被当作无效而无法访问网页。(如果设置了Fidder前置代理则需要删掉)

然后SSH连接输入如下命令
  1. # 创建一个叫PrivoxyUA的表
  2. iptables -t nat -N PrivoxyUA
  3. # 将PrivoxyUA添加到PREROUTING表
  4. iptables -t nat -A PREROUTING -i br-lan -p tcp -j PrivoxyUA

  5. # 对如下地址不进行转发(都是内网)
  6. iptables -t nat -A PrivoxyUA -d 0.0.0.0/8 -j RETURN
  7. iptables -t nat -A PrivoxyUA -d 10.0.0.0/8 -j RETURN
  8. iptables -t nat -A PrivoxyUA -d 127.0.0.0/8 -j RETURN
  9. iptables -t nat -A PrivoxyUA -d 169.254.0.0/16 -j RETURN
  10. iptables -t nat -A PrivoxyUA -d 172.16.0.0/12 -j RETURN
  11. iptables -t nat -A PrivoxyUA -d 192.168.0.0/16 -j RETURN
  12. iptables -t nat -A PrivoxyUA -d 224.0.0.0/4 -j RETURN
  13. iptables -t nat -A PrivoxyUA -d 240.0.0.0/4 -j RETURN

  14. # 重定向80端口的数据到8118端口(之前Privoxy的代理端口)
  15. iptables -t nat -A PrivoxyUA -p tcp --dport 80 -j REDIRECT --to-ports 8118
  16. # 因为https是无法直接检测UA的,所以没必要重定向转发
  17. # iptables -t nat -A PrivoxyUA -p tcp --dport 443 -j REDIRECT --to-ports 8118
复制代码
我对这些软件没有研究,如何对部分ip进行转发请自行查询 iptables 的手册。

弄好后,再试试用手机不设任何代理访问,会发现远程识别到的User-Agent已经没有了Android。


至此工作完成,连入此路由下网络的手机会自动替换掉会导致断网的字符串,可以自由的用手机上网了。

不过有时还是会发现断网,可能是有些没有被注意到的字符串也是被识别为手机,但是我没有发现哪些是特殊的,还请发现的人告诉我。
另外此方法会导致有一小部分网站无法正常访问,我也是个新手不知道原因,比如 http://useragentstring.com/

评分

参与人数 2恩山币 +2 收起 理由
dsanke + 1 强大的恩山!(以下重复1万次)
近未来 + 1 强大的恩山!(以下重复1万次)

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2017-8-10 20:14 来自手机 | 显示全部楼层
学习学习谢谢分享
我的恩山、我的无线 The best wifi forum is right here.
发表于 2017-8-21 12:33 | 显示全部楼层
本帖最后由 中国联通来巡山 于 2017-8-21 15:59 编辑

楼主,请看我的代码对吗

# 替换Header里的安卓
{+client-header-filter{iPhone}}
/

#把“Android”和“iPxxxx”替换为“Windows NT”的filter
CLIENT-HEADER-FILTER: iPhone Replace all "iPhone" with "Windows NT"

s@\b(iPhone|iP\w+)\b@Windows NT@ig

错误如下,
2017-08-21 14:29:47.341 77f43000 Error: Missing filter 'iPhone'
2017-08-21 14:29:47.341 77f43000 Error: Invalid action section in file '/etc/privoxy/user.action', starting at line 201: {+client-header-filter{iPhone}}

后续:
在用谷表哥的帮助下,我重装了软件之后就解决了,在此给有同样问题的朋友提供方案
非常感谢楼主的教程

点评

我其实不是很懂,因为他这个的正则写起来太困难了  发表于 2017-11-6 17:37
我的恩山、我的无线 The best wifi forum is right here.
发表于 2017-8-23 15:30 | 显示全部楼层
HTTPS  网址岂不是没什么作用?

点评

https当然不怕,中间无法攻击。  发表于 2017-11-6 17:38
我的恩山、我的无线 The best wifi forum is right here.
头像被屏蔽
发表于 2017-8-23 17:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
我的恩山、我的无线 The best wifi forum is right here.
发表于 2017-9-12 09:31 来自手机 | 显示全部楼层
使用nginx的http_set_header应该也可以实现吧
我的恩山、我的无线 The best wifi forum is right here.
发表于 2017-9-12 11:11 | 显示全部楼层
我就有疑问了,要是按照你说的根据ua验证的方式,那么是否是说我只能用一个浏览器? 每个浏览器都有不同的ua吧, 所以你这个理论不成立阿。

想代理好多用户上网的方式还是很多的,直接连一个路由器不行吗?经过路由器的都被nat了,不会发现的
我的恩山、我的无线 The best wifi forum is right here.
发表于 2017-9-12 14:04 | 显示全部楼层
看了一下手册,没必要想你弄得那么麻烦,privoxy自带有一条规则,+hide-user-agent,在match-all.action中添加即可

点评

很多走http的软件有特殊的user-agent,直接隐藏会导致出错。  发表于 2017-11-6 17:44
我的恩山、我的无线 The best wifi forum is right here.
发表于 2017-9-28 11:46 | 显示全部楼层
本帖最后由 99010 于 2017-9-28 11:53 编辑

在default.action中添加
  1. +hide-user-agent{Mozilla/5.0 (compatible; WOW64; MSIE 10.0; Windows NT 6.2)}
复制代码
我的恩山、我的无线 The best wifi forum is right here.
发表于 2017-9-29 21:57 | 显示全部楼层
本帖最后由 taibaiwuming 于 2017-9-29 22:20 编辑

谢谢楼主,这样设置确实避开了UA检测,但是失去了UA,有些网页访问起来会有问题,有没有兼容性好一点的解决方案呢
我的恩山、我的无线 The best wifi forum is right here.
发表于 2017-9-30 16:29 | 显示全部楼层
paldier 发表于 2017-8-23 17:25
https肯定没用,而且手机上直接改不就好了吗

怎么在手机上改?
我的恩山、我的无线 The best wifi forum is right here.
发表于 2018-2-10 17:08 | 显示全部楼层
请问能过这个办法,可不可以把连接在路由器上面的电视模拟成一个电脑访问视频文件?
我的恩山、我的无线 The best wifi forum is right here.
发表于 2018-5-18 01:26 | 显示全部楼层
感谢楼主,成功搞定。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2018-6-8 12:13 | 显示全部楼层
“privoxy”(主程序)、“luci-app-privoxy”(用户界面)、“luci-i18n-privoxy-zh-cn”(用户界面中文翻译   楼主能否提供这三个包  我这边找不到

点评

不同路由器包不能通用的吧,再说我也不会提取。  发表于 2018-12-13 17:53
我的恩山、我的无线 The best wifi forum is right here.
发表于 2018-6-8 14:04 | 显示全部楼层
教育网还这么贵?十年前我上大学那会儿的教育网真是爽啊,十块钱百兆上下对等可路由也可多人同时拔号还有ipv6高校pt。现在pt都没了,资费竟然还这么坑
来自安卓客户端来自安卓客户端
我的恩山、我的无线 The best wifi forum is right here.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2019-12-12 00:20

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表