可以用来代理上网,或者搭建镜像站的一个项目
需求场景:
- 只需简单代理上网,查看
google
搜索,或者看看维基百科
- 在某些环境下,无法便捷安装科学上网客户端,又需要查看某个国外网址
- 搭建镜像站,例如: google 镜像站,百度镜像站
如果需要为pc或者手机设置全局代理,这是 morty 无法实现的,morty 仅能代理网站
解决方案:
目前主流的软件,均需要安装客户端,实现 http 代理
介绍一个通过解析 html 实现无需客户端即可代理访问网站的项目
亦可用来搭建镜像站
morty项目 可以实现网址替换,将访问 baidu
或者其它网站的请求进行代理
例如:将 morty
部署在一台服务器上,访问网址为:morty.frp.zwc365.com,在其中输入 www.baidu.com
其便会将 www.baidu.com
的数据进行返回
原理分析
正常的 html
页面中,会包含 css
、js
等文件的 url, 这些 url 可能是这样的形式:https://www.google.com/assets/test.css
此项目会对 html 进行解析和注入,将这样的网址替换成: https://morty.frp.zwc365.com/?mortyurl=/assets/test.css
当请求被发送到 morty.frp.zwc365.com
后,该服务器通过解析 mortyurl
参数,得知需要访问的真实 url,并进行代理访问,获取数据后进行解析和注入再返回给浏览器
这样可以实现无需客户端,即可通过服务器解析和注入实现代理上网
特点
普通 http 及 https 代理中,是在请求头中直接加入目标网址,这种方式可以被识别和拦截。
而注入的方式,访问的是一个普通域名,但是内容却是其它网站的内容,通过服务器进行了解析注入,无法被识别和拦截。所以可以一定程度的规避防火墙
缺点
这种通过代理访问的方式,由于注入修改了网页内容,可能会被 js
代码识别,被当做爬虫而拦截,经过测试,淘宝
、京东
、12306
网站均无法正常加载主页
但是通过 morty 是可以正常访问 google
或者 维基百科
及 百度
的
总结就是:一些反爬虫措施非常严格的网站无法成功访问
镜像站制作
假设你已经按照项目教程,成功搭建了服务,此时通过 url 打开服务主页,在浏览器页面中央有输入框
在此输入框中输入网址即可访问被代理网站,以 baidu 为例,在输入框中输入:www.baidu.com
按下回车后,即会代理百度页面。在浏览器上方 url 地址栏中的 地址 即可充当镜像站地址
该测试网站服务位于国内,仅提供国内网站代理
镜像站示例:
百度镜像站(仅用于测试)
测试网站不保证可用性
实际上, morty 搭建的服务器,如果不经过保护,很容易被滥用
既然有百度镜像站,那么只要 morty 搭建在海外 vps,就可以提供 google镜像站,或者直接提供海外网站代理服务
注意:如果搭建在海外vps上,建议使用 https,并且推荐使用 basic 认证,给自己的 morty 服务加个密码
按照我的理解:
通过 https 验证后,防火墙仅得知访问的网址,无法得知真实网址(也就是提到的 mortyurl 参数),但能主动请求下,探测得知是 morty 服务器
再加上 basic 密码认证,防火墙仅能得知访问了一个网站,而无法得知网站提供什么内容
实际上,这个项目是来给 searX 搜索项目代理访问网址的,只是用途不仅限于此
The main goal of morty is to provide a result proxy for searx, but it can be used as a standalone sanitizer service too.
其项目上也有明确说明
这种代理方式如果不加密码认证,按理说可以被主动探测,只要访问网站的参数中,提供一个
mortyurl
参数,然后分析返回数据
可能这种代理比较冷门,或者用途没有 vpn 广泛,所以没有遭到封禁