使用SOCK_STREAM代理处理https请求

时间:2012-10-30 15:48:22

标签: python sockets ssl https

我正在开发一个允许用户通过代理重定向浏览的项目。系统的工作方式如下 - 用户在远程PC上运行此代理,然后在他的笔记本电脑上运行代理。然后,用户将其笔记本电脑上的浏览器设置更改为使用localhost:8080来使用该本地代理,该代理又将所有浏览器流量转发到远程PC上运行的代理。

这是我遇到HTTPS的地方。我能够正常处理正常的HTTP请求,但是当我点击google.com时,Firefox会跳过我的代理并直接连接到https://google.com

我的想法是观察浏览器请求说 CONNECT host:443 ,然后使用python ssl模块来包装该套接字。这将为我提供外部代理和目标服务器之间的安全连接。但是,当我在ssl启动之前运行wireshark以查看浏览器请求的样子时,它已经存在,这意味着它看起来像浏览器直接连接到端口443,这解释了为什么它省略了我的本地代理。

我希望能够处理HTTPS,因为这样可以提供完整的浏览体验。

我真的很感激任何能够推动正确方向的提示。

1 个答案:

答案 0 :(得分:0)

好吧,在对代理进行了大量阅读之后,我发现我对这个问题的理解是不够的。

对于可能最终与我同处的其他人,请知道HTTP,HTTPS和SOCKS代理之间存在很大差异。

HTTP 代理通常会快速查看HTTP标头,以确定转发整个数据包的位置。使用套接字的一些基本知识,可以很容易地自行编码。

另一方面,

HTTPS 代理必须以不同的方式工作。他们应该能够为客户端执行整个SSL魔术,或者他们可以尝试在没有更改的情况下传递流量,但是如果选择后一种解决方案,则用户IP将是已知的。在编码方面,这一点要求更高。

SOCKS 代理是完全不同的,虽然非常酷,野兽。他们在OSI模型的第五层工作,老实说,我不知道我甚至会开始创建一个。它们实现了安全性和匿名性。但是,我知道一个人可能能够使用SSH在他们的机器上启动SOCKS代理,只需阅读http://www.revsys.com/writings/quicktips/ssh-tunnel.html。该链接还提出了一个想法,即应该可以使用Python脚本中的SSH来使其更加方便。

希望这可以帮助任何有同样问题的人。祝你好运!