免流详解

本篇文章皆以移动作为举例,联通电信可以举一反三
要学习写模式首先要熟悉HTTP协议,因为网络数据的传输都是建立在这个协议的基础之上
关于HTTP协议可以看这篇文章大致了解一下:HTTP协议详解,自行百度哈!

不需要全部记忆,只需要记住几个关键的东西,就是下面这个。看了上面的那篇文章,我们知道一个最基本的HTTP请求是这样的:

GET /hope/ HTTP/1.1
Host: ce.sysu.edu.cn

GET是请求方法,除了GET还有POST,这个不重要,大致了解就可以。
/hope/是请求访问资源的路径,就如同计算机上的文件路径,只不过这是换成了网络的形式。这个不重要
HTTP/1.1是协议版本,有1.0和1.1。不重要
Host后面是服务器的IP地址或者域名,以“:”为标记后跟域名地址。就像送快递时的地址一样,只有知道了地址才知道要送到哪。只有知道了Host才知道你要访问哪个服务器。这个很重要
以上是最基本的请求格式,且缺一不可。

其次要了解免流的原理,我们知道移动有很多免流量服务,如掌厅,错导,咪咕等,免流说白了就是利用这些免流量服务的漏洞为我们所用,如果哪天这些服务停止了,那也就是免流终结的一天。

为什么能够使用咪咕影院而不扣流量,运营商是怎么做到的呢?当然,运营商肯定不会告诉我们,但总有大神能够想到。。。根据HTTP协议猜测出运营商是通过检测Host、X-Online-Host后面的域名来判断是否免扣流量,因为在使用咪咕影院,掌厅的过程中,唯一不变的就是这两个头域。

这里详解一下X-Online-Host,这个是移动的私有协议中的头域,和Host的作用一样,也是用于标记服务器地址,只是只能用于10.0.0.172代理(至于什么是代理ip,问度娘),10.0.0.172是移动自家的代理,意思就是除了它,其他的代理都无法识别X-Online-Host,会忽略它的存在,而且如果Host和X-Online-Host同时存在,10.0.0.172会以X-Online-Host后面的域名为准,后面会说到如何利用这个达到免流的效果。

X-Online-Host的使用格式:放在GET那一行(也就是第一行)后面就行。如:

GET /hope/ HTTP/1.1
Host: ce.sysu.edu.cn
X-Online-Host:apkdy.com

这样写的话10.0.0.172就会以X-Online-Host为准,也就是会访问我们的大刀云了。

我们知道了运营商检测的两个头域,那我们就要利用这两个头域达到免流的目的,但各地运营商检测机制不一样,检测的标记也就不同,有的以Host为准,有的以X-Online-Host为准,就是所谓的检测优先级。那么,我们首先要做的是提取一个免流量服务的域名,我们统称免流Host,然后判断当地运营商检测的优先级。

然后判断当地运营商检测的优先级。

在判断检测优先级前,先说说怎么提取免流Host,掌厅一般都是以当地手机掌厅的域名作为免流Host,格式:wap.xx.10086.cn,xx指你所在地运营商的拼音首字母。

如湖南:wap.hn.10086.cn。基本不需要提取。其他的免流量Host怎么提取呢?首先,你要下一个抓包软件,搜索“无root抓包 汉化”,下载安装,然后开始抓包,这里以咪咕影院为例,用咪咕影院看一会电影,然后停止抓包,抓到的包每一条后面都会有这条数据的大小,相当于你使用的流量大小,挑数据相对大的那一条,里面的Host95%是免流Host,如果都很小,则各个条数据看看,一般出现次数最多的Host就是免流Host。

知道了免流Host接下来说说检测优先级,还有修改协议内容是需要软件的,大神们都已经做好了,论坛很多,我用的是tiny,顺便说一下tiny的语法。

tiny语法:
#为注释,键值用分号;结尾

#模式,wap或net,net_proxy,net_off(net模式下,代理ip和端口无效,net_proxy非80端口http走http_ip代理,net_off非80端口http请求不连网)
mode=wap;(如果是cmwap接入点下的模式就写wap,cmnet接入点下就写net)

#监听端口
listen_port=65080;(这个无所谓,不用改)

#后台运行 on打开,off关闭
daemon=on;(不用改)

#子进程数量,默认0
worker_proc=0;(不用改)

#用户,只支持root inet net_raw等有限几个
#user=root;(不用改)

#uid和用户只能设置一个
*3004;(不用改)

#http代理ip和端口
http_ip=10.0.0.172;
http_port=80;

#删除http请求头域,不区分大小写,多个用英文逗号,分隔

http_del=“X-Online-Host,Host“;(基本上不用改,这个主要是为了删除原本协议中的Host)

#修改http请求首行([method]代表自动获取请求方法,就是GET之类的,必写。[uri]代表请求资源路径,必写。[version]代表自动获取HTTP协议版本,必写。[host]代表自动获取真实服务器地址,也就是你真正想要访问的地址。\r\n代表换行,HTTP协议规定每换一次行都必须写,且尾行以此为结尾。)
http_first=“[method] [uri] [version]\r\n“;

#支持https(CONNECT)请求,on打开,off关闭,其它同http
https_connect=on;
https_ip=10.0.0.172;
https_port=80;
https_del=“X-Online-Host,Host“;(同http)
#CONNECT相当于https的请求方法,https的格式跟http略有不同,格式就是下面这个。
https_first=“CONNECT [host] [version]\r\n“;

#dns解析(http解析ip,php为dnsp解析地址)
dns_tcp=http;
dns_listen_port=65053;
dns_url=“119.29.29.29“;

去掉注释后:
*3004;
mode=wap;
listen_port=65080;
daemon=on;
worker_proc=0;
http_ip=10.0.0.172;
http_port=80;
https_connect=on;
https_ip=10.0.0.172;
https_port=80;

http_del=“Host,X-Online-Host“;
http_first=“[method] [uri] HTTP/1.1\r\n“;

https_del=“Host,X-Online-Host“;
https_first=“CONNECT [host] HTTP/1.1\r\n“;

dns_tcp=http;
dns_listen_port=65053;
dns_url=“119.29.29.29“;

写模式只需要在此基础上进行修改就可以,这就如同一个框架。

修改模式的时候,既要保证可以正常上网,又要保证免流Host的存在,记住这点,很重要

下面会讲到两种优先级,一种是代理优先级,一种是检测优先级。

如何保证正常上网呢?如果代理为10.0.0.172,10.0.0.172以X-Online-Host为最高代理优先级,之后才是Host,那么在模式http首行修改中X-Online-Host必须为真实Host,也就是

http_first=“[method] [uri] HTTP/1.1\r\nX-Online-Host: [host]\r\nHost: wap.xx.10086.cn\r\n“;

[
tab] 如果代理为其他代理,也就是圣子(非10.0.0.172的代理皆为圣子),圣子是不认识X-Online-Host的,所以Host必须为真,如:

http_first=“[method] [uri] HTTP/1.1\r\nX-Online-Online: wap.xx.10086.cn\r\nHost: [host]\r\n“;

知道了如何保证正常上网那么接下来测试运营商的检测优先级。首先,判断X-Online-Host和Host的检测优先级关系,在10.0.0.172代理下,修改http和https首行分别为

http_first=“[method] [uri] HTTP/1.1\r\nHost: wap.xx.10086.cn\r\nX-Online-Host: [host]\r\n“;
https_first=“[CONNECT [host] HTTP/1.1\r\nHost: wap.xx.10086.cn\r\n“;

下载5M以内的文件后关闭数据,等十五分钟查询流量,如果可以免则代表运营商检测的优先级Host大于X-Online-Host。

反之,X-Online-Host大于Host,我们知道10.0.0.172是以X-Online-Host作为最高代理优先级的,所以这种情况应该用圣子代理,修改代理为圣子ip(仅修改http代理,https不用),修改http和https首行分别为

http_first=“[method] [uri] HTTP/1.1\r\nHost: [host]\r\nX-Online-Host: wap.xx.10086.cn\r\n“;
https_first=“[CONNECT [host] HTTP/1.1\r\nX-Online-Host: wap.xx.10086.cn\r\n“;

还有就是利用\r隐藏真实Host从而达到免流的效果。如:

http_first=“[method] [uri] HTTP/1.1\r\n\rHost:[host]\r\nX-Online-Host: wap.xx.10086.cn\r\n“;

因为运营商检测机制不能很好的识别\r,所以忽略了真实Host。之前很火的JJ和离调模式都是利用这个原理。现在有的地方应该还可以用。

如果试了以上的方法都不行,那只能试试云免了。云免的原理相当于自定义Host头域,比如原本在HTTP协议中标记真实Host的头域为Host,是这样的“Host: apkdy.com”,而在云免中可以是这样的“Apkdy: apkdy.com”,头域自定义,只要是英文,然后通过搭建的服务器将自定义的头域识别出来从而正常上网。

云免也不行的话,那就老老实实用WIFI吧!

最后,写模式可以随便写,但要在一定范围内遵守HTTP协议,你总不能把真实Host丢了吧?以上纯手打,如有错误望指正。

ps:模式有很多,有人甚至收藏了千个,其实核心原理也就那几个,不要再做收藏党了,求人不如求己

xiaotmh

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: