有没有将 CGI Proxy 转化为普通 HTTP Proxy 的工具呢?

2020-05-10 22:41:53 +08:00
 CoolSpring

根据 Wikipedia,CGI Proxy 的定义是“A CGI web proxy accepts target URLs using a Web form in the user's browser window, processes the request, and returns the results to the user's browser.”( CGI 代理使用浏览器中的 Web 表单接受目标 URL,处理请求,并将结果返回给用户浏览器。)

我们学校使用的是深信服的 SSLVPN 产品,对于在校外接入校园网环境的需求,提供了两种方式——

  1. 使用 EasyConnect 客户端,然而这个客户端的风评不怎么好;
  2. 手机版访问 https://rvpn.zju.edu.cn ,登录后可以得到这样一个界面: https://i.loli.net/2020/05/10/x6LkImzYV1QD2Pq.png 。再输入网址例如 cnki.net ,点击“访问”会跳转到这样的 URL 格式 https://rvpn.zju.edu.cn/web/1/https/0/cnki.net/ 。所以这大概是可以归为上面所述的 CGI Proxy 一类。

于是突然有一个想法:可不可以通过在本地运行一个程序伪装成 HTTP Proxy,把请求转发给方法 2 的这个 CGI Proxy 呢?

浏览器 <--(普通的 HTTP 代理请求)--> 表现为 HTTP Proxy 的转发程序 <--(附带上验证所需的 Cookie 的 Web 请求)--> CGI Proxy <----> 校内网站

具体需求:

  1. 读浏览器发送的请求 1,从中抽取 Method, URL, Headers, Cookies
  2. 向原请求 1 的 Cookies 加入一个形如 "TWFID=xxxxxxxxx" 的通过验证用的 Cookie 之后,将这个请求 2 转发到 https://{Web_Portal_Endpoint}/web/1/http(s)/0/{URL} (或者说是新生成一个请求 2,总之达到目的即可)
  3. 读请求 2 返回的内容,进行一定的过滤处理(这个网页版 SSLVPN 会插入一些 JS 文件和 HTML Tag,原本是为了 URL Rewrite,但有时这些脚本会影响网页的正常功能,因此需要去除,也可以去除)之后将改动后的 Response 发回给浏览器。

目前用 Uvicorn + Requests 已可以实现简单的 HTTP GET/POST 请求转发,但是不支持 HTTPS,因为 HTTPS 需要用到 CONNECT 方法,而我不知道它在我这种情景下该如何实现。

所以来请教大家,我的这种想法有没有现成的工具呢?或者说,应该从哪个抽象的层级入手(单从 Python 来说,查到了 socket, h11, twisted 等库不知如何选择。它们的封装程度各不相同,想要能达到目标却又不想涉及到太繁杂的无关的底层处理)

2383 次点击
所在节点    奇思妙想
3 条回复
oott123
2020-05-11 00:48:51 +08:00
这应该不是 CGI Proxy,更像是一种 reverse proxy,即反向代理

现成工具没有听说过
Latin
2020-05-11 09:52:57 +08:00
先抓包,一般这种 vpn 大多走的都是 pac
CoolSpring
2020-06-23 22:23:32 +08:00
引入 elazarl/goproxy 再拼拼凑凑,基本上针对我的需求是可用了……
供参考: https://github.com/CoolSpring8/rwppa/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/670356

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX