菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
0
0

使用 Proxy 突破网管的限制

原创
05/13 14:22
阅读数 562

背景

公司网络限制了网易云音乐的使用,网页和客户端皆不可使用,虽然QQ音乐没有禁用(难道网管对网易有偏见?),但是实在觉得QQ的推荐功能不如网易的,遂决定想法子突破网管的限制。

尝试

首先想到的是通过代理服务器绕过公司网络的监管,因为这样就不是直接请求“163.com”这个域名。在VPS配置了一个正向代理,设置云音乐客户端使用自己的代理服务器,发现还是不行,请求被不断的302重定向回来。

猜测

通过使用Wireshark抓包发现,发往代理服务器的数据中还是有“163.com”这样的信息,估计公司网络是根据这些关键信息进行拦截,于是猜测将发往代理服务器的数据加密就可以绕过监测了。

再次尝试

本来打算自己实现一个这样的代理服务器,搜索后发现已经有一个具备这样功能的用Golang实现的开源项目Proxy,下面是官方的特性介绍:

  • 链式代理,程序本身可以作为一级代理,如果设置了上级代理那么可以作为二级代理,乃至N级代理。
  • 通讯加密,如果程序不是一级代理,而且上级代理也是本程序,那么可以加密和上级代理之间的通讯,采用底层tls高强度加密,安全无特征。
  • 智能HTTP,SOCKS5代理,会自动判断访问的网站是否屏蔽,如果被屏蔽那么就会使用上级代理(前提是配置了上级代理)访问网站;如果访问的网站没有被屏蔽,为了加速访问,代理会直接访问网站,不使用上级代理。
  • 域名黑白名单,更加自由的控制网站的访问方式。
  • 跨平台性,无论你是widows,linux,还是mac,甚至是树莓派,都可以很好的运行proxy。
  • 多协议支持,支持HTTP(S),TCP,UDP,Websocket,SOCKS5代理。

等等。更多介绍可以到码云上浏览,这里只用到了上面这些特性。

原理

为了绕开公司网络的监测,需要加密本地发往代理服务器的数据,然后由代理服务器解密数据,再发往真正的服务器,因些我们需要两级代理,原理如下图所示(盗用官方的一张图):

这里选用socks代理,因为它只是简单的传输数据,而不关心是何种应用协议,因此比其他应用层代理要快得多。

实践

安装

本机(Windows)下载Windows版解压,VPS(Linux)下载Linux版解压即可。

生成证书

在本机或者在VPS生成都可以,但是要保证两端的证书文件是一样的。下面演示在Linux上生成证书文件:

./proxy keygen -C proxy

执行命令会在当前目录下生成proxy.key和proxy.crt两个文件,将这两个文件复制到本机的Proxy安装目录中。

运行

在VPS上执行命令:

./proxy socks -t tls -p ":3333" -C proxy.crt -K proxy.key --daemon --forever --log proxy.log
  • socks:开启socks5代理
  • -t tls:使用TLS传输协议
  • -p ":3333":监听3333端口
  • -C proxy.crt -K proxy.key:指定证书文件
  • --daemon:后台运行
  • --forever:proxy会fork子进程,然后监控子进程,如果子进程异常退出,5秒后重启子进程
  • --log proxy.log:指定日志文件

本机打开Proxy安装目录中的“bootstrap.bat”文件,将“proxy.exe ...”这一行修改为:

proxy.exe socks -p ":3334" -t tcp -T tls -P "IP:3333" -C proxy.crt -K proxy.key --debug

其中小写"p"表示本机监听端口,大写“P”表示VPS端监听地址,小写“t”表示本机使用的传输协议,大写“T”表示VPS端使用的传输协议。保存文件后,双击“bootstrap.bat”即可启动Proxy。注意本机和VPS要开启相同的代理类型,例如必须同是http代理或者同是socks代理。

修改黑白名单

黑名单保存在安装目录下的"blocked"文件中,白名单保存在“direct”文件中,一行一个域名,匹配规则是最右匹配,比如:baidu.com,匹配的是 ..baidu.com。黑名单的域名直接走上级代理,白名单的域名不走上级代理,如果域名同时存在于黑白名单中,以黑名单的为准。因此我们还要检查白名单文件中是否有我们需要代理的域名,如果有的话,将其从白名单中删除,或者添加到黑名单中,否则这些请求就不会走代理了。

设置客户端

现在只要将客户端的代理类型设置为“socks5”,代理地址设置为“127.0.0.1:3334”即可绕过网管的监视了<( ̄3 ̄)> !

发表评论

0/200
0 点赞
0 评论
收藏
为你推荐 换一批