需要准备的工具
- iphone
- mac电脑
- wireshark软件
- xcode 或者 itunes
方案概要
手机4g上网,用电脑抓包,分析协议
准备工作
iphone使用流量模式,用数据线连接mac,并且信任
使用 xcode 或者 itunes 获取 手机 uuid, 具体方法网上很多
终端 输入 rvictl -s 加上刚刚获取的uuid号码
,映射一个虚拟网口到mac
如果连接成功,通过 ifconfig -l
可以看到多出来一个网口名为 rvi0
具体如下图所示
使用wireshark抓包
打开软件在filter中填写tcp port http
执行抓取http协议的包
再双击下面rvi0
端口,进入抓包页面。
这时候我们手机用uc浏览器打开任意网页,可以抓到下面包,
发现请求是发送给36.99.39.192
的一个http代理服务器服务器,
鉴权秘钥也可以看到,经过多次分析发现鉴权秘钥分4段,
经过一下尝试
- http和https
- 同域名不同路径
- 关闭uc浏览器,断开所有连接,间隔4小时候尝试
发现鉴权秘钥完全一致,但是访问不同域名,最后一段会变化。
经推测,最后一段字符是根据域名加密的,和协议,路径无关。
字符数量为始终32位,可能是拼接字符串后MD5,或者sha1等等,这个无关紧要了。
测试猜想
使用telnet 36.99.39.192 8771
连接代理服务器后发送以下头
CONNECT rb.pch18.cn:80 HTTP/1.1
Host: rb.pch18.cn:80
Proxy-Authorization: {抓包抓到的鉴权秘钥}
GET / HTTP/1.1
Host: pch18.cn
成功拿到返回内容!!
如果这段代码在手机上发送,应该就能实现免流
尝试用openvpn连接自己服务器实现全局免流
配置openvpn服务端
# 创建配置文件目录
mkdir -p /home/.openvpn
# 生成配置文件
docker run -v /home/.openvpn:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u tcp://ip:1194
# 初始化证书等,需要输入证书注册
docker run -v /home/.openvpn:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki
# 启动服务进程
docker run --name openvpn_server -v /home/.openvpn:/etc/openvpn -d -p 1194:1194 --cap-add=NET_ADMIN kylemanna/openvpn
# 生成没有密码的客户端证书
docker run -v /home/.openvpn:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full pch18 nopass
# 使用嵌入式证书检索客户端配置
docker run -v /home/.openvpn:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient pch18 > pch18.ovpn
配置前置代理
使用uc浏览器访问https://你的openvpn的域名:openvpn的端口后
,去wireshark里面抓CONNECT的包,
提取Proxy-Authorization
鉴权字段信息
然后修改刚刚生成的ovpn文件
修改remote
字段后的ip地址为刚刚的域名
再在remote
字段下一行加上
http-proxy {抓包中CONNECT的实际目的ip地址} {端口}
http-proxy-option EXT1 "Host: {openvpn域名}:{openvpn端口}"
http-proxy-option EXT1 "Proxy-Authorization: {刚刚获取的鉴权字段信息}"
把修改好的文件导入手机openvpn
抓包验证
打开抓包,手机打开openvpn,出现下图内容,发现流量走的是UC浏览器的http代理,成功!!!!
结论
成功!
手机上开启上上述配置的openvpn后,刷抖音半小时,全国通用流量没有增加,定向流量增加了200M+
速度可能没有直接流量访问快,刷抖音还是很流畅的。
其他
以上测试是关闭了uc浏览器的极速省流模式,
此状况下uc浏览器访问的ip地址和其他浏览器得到的ip地址不同,可以断定流量走代理。
但是! 开启极速省流模式,uc浏览器查询的ip为手机真实ip,
此状况下能不能免流不确定,但是应该也是走代理的,实现方法非常神奇。
抓包发现,浏览器访问网站前先tcp协议直接和对方服务器握手,握手包中写的来源ip为代理服务器的ip。
这样对方服务器就会把请求不返回给手机,而是直接返回给代理服务器,
然后手机在和代理服务器通讯,拿到对方服务器返回的网页数据。
使用此方法,实现了虽然走了代理,但是对方网页应用获得的ip来源不是握手包中的ip,而是实际握手时发信的ip地址。
很巧妙的实现了ip不变的代理服务器。
以上结论为本人推测,tcp协议了解没有十分深入,如有错误请指出。
定向也是限制流量的 一般 30-60G一个月不等,超过这个流量也是限速或者扣费的。
移动有吗