Skip to content

一个暂时免翻墙访问Pornhub的办法

Notifications You must be signed in to change notification settings

smile2741/PornhubProxy

Repository files navigation

此项目用到了一个我自己写的一个库 https://github.com/LeiKaiFeng-GoodBoy/LeiKaiFeng.Http

下载页面https://github.com/LeiKaiFeng-GoodBoy/PornhubProxy/releases

启发项目 https://github.com/mashirozx/Pixiv-Nginx

提前说明一下,不同地区策略不同, 不保证一定能用,不保证一直可用,不支持登陆帐号,只能简单浏览 先测试一下是否可以访问这个网站https://www.livehub.com, 能上应该就可行,浏览器警告隐私错误是正常的

运行要求 .NETFramework v4.7.2以上

1.(可选)将文件夹中的myCA.crt导入到系统受信任的根证书列表,是受信任的根证书列表,是受信任的根证书列表,这一步是避免浏览器隐私警告,只有Chrome有效,Firefox不管用,所以不导入也可以用,只不过需要忽略浏览器警告

2.运行文件夹中的PornhubProxy.exe

3.在浏览器中访问链接(注意是HTTPS) https://cn.pornhub.com/

我对前端不了解,去不掉视频播放时的广告,但是广告加载又很慢,所以我缓存了一个广告在安装包里

代码写的很糟糕,所以简单的说一下原理

简单的说就是绕过SNI(服务器名称指定协议)审查,可以自行搜索SNI审查,有好多好东西,在实践中一般SNI发送空的或者ip地址服务器也会返回一个默认证书,主要看客户端是否同意继续建立连接

我们知道一个服务器上,或者说一个ip地址上,可以托管不止一个网站,在HTTP协议中通过Host请求头来分别,现如今大多数网站都支TLS加密,建立加密链接后才会传输HTTP协议内容,但是建立TLS需要验证服务器证书,所以TLS握手协议添加了一个扩展字段用于客户端向服务器表明要验证哪个网站的证书

那么现在就有这样一种情况,TLS建立加密时会发送一个想要请求的网站的字符串,加密后HTTP协议仍可以发送Host请求头,只不过一般情况下这两个字符串的值都相同,如果不相同一般网站也会返回错误响应,但是理论上两个字段可以不相同,这要看目标网站的策略,假如允许,便会出现这样一种情况,假如一个ip上有两个网站A与B,我们建立加密时验证A网站的证书,也会明文发送一个A网站的域名字符串,当建立加密连接后我们将HTTP协议的Host请求头设置为B网站的域名,并且可以正常返回B网站的内容

我们需要考虑一下防火墙的策略,一般情况下防火墙并不仅仅只是根据ip地址来封锁,正如之前所说,一个ip地址上可能有好多网站,封掉一个ip可能会导致其他没问题网站也无法访问,所以防火墙会检查协议的内容,比如HTTP的Host请求头,TLS握手协议的明文部分,假设防火墙不允许与B网站建立加密链接(通过检查TLS握手协议的明文部分的扩展字段),但是允许与A网站建立加密链接,加密链接建立之后的传输内容理论上防火墙无法看到(但从整体上知道双方各传输了多少字节)所以我们可以在后续的HTTP协议中通过Host请求头请求B网站的内容

综上所述,我们通过与之前提到的一个域名 https://www.livehub.com 建立加密链接,然后在HTTP协议中请求cn.pornhub.com的内容,至于这个网址则是通过同ip网站查询得到的,比如这个网站 https://www.yougetsignal.com/tools/web-sites-on-web-server/

当然一个网站上的所有资源并不都在一个ip和一个域名当中,这也是这种办法的缺点,我们现在只是获取了网站的主体部分,还有图片资源与更重要的视频资源,但图片与视频资源都可以正常访问,只不过速度不一样,比如预览视频与图片都在 ei.phncdn.com di.phncdn.com ci.phncdn.com这三个域名指向的节点中,我这边测试ei开头的最快,便将响应中所有di与ci开头的链接都替换为ei开头的链接

About

一个暂时免翻墙访问Pornhub的办法

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages