morty 无需客户端代理上网或搭建镜像站

morty 无需客户端代理上网或搭建镜像站

可以用来代理上网,或者搭建镜像站的一个项目

需求场景:

  • 只需简单代理上网,查看 google 搜索,或者看看 维基百科
  • 在某些环境下,无法便捷安装科学上网客户端,又需要查看某个国外网址
  • 搭建镜像站,例如: google 镜像站,百度镜像站

如果需要为pc或者手机设置全局代理,这是 morty 无法实现的,morty 仅能代理网站

解决方案:

目前主流的软件,均需要安装客户端,实现 http 代理
介绍一个通过解析 html 实现无需客户端即可代理访问网站的项目
亦可用来搭建镜像站

morty项目 可以实现网址替换,将访问 baidu 或者其它网站的请求进行代理

例如:将 morty 部署在一台服务器上,访问网址为:morty.frp.zwc365.com,在其中输入 www.baidu.com 其便会将 www.baidu.com 的数据进行返回

原理分析

正常的 html 页面中,会包含 cssjs 等文件的 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 广泛,所以没有遭到封禁

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://zwc365.com/2020/09/02/morty-server