【问题标题】:Handling https requests using a SOCK_STREAM proxy使用 SOCK_STREAM 代理处理 https 请求
【发布时间】:2012-10-30 15:48:21
【问题描述】:

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

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

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

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

我非常感谢任何可以朝着正确方向发展的提示。

【问题讨论】:

    标签: python sockets ssl https


    【解决方案1】:

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

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

    HTTP 代理通常会快速查看 HTTP 标头以确定将整个数据包转发到何处。只需具备一些套接字的基本知识,您就可以很容易地自行编写这些代码。

    另一方面,

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

    SOCKS 代理是完全不同的,尽管它真的很酷,野兽。他们在 OSI 模型的第 5 层工作,老实说,我什至不知道从哪里开始创建一个。他们实现了安全性和匿名性。但是,我确实知道有人可以使用 SSH 在他们的机器上启动 SOCKS 代理,只需阅读此 http://www.revsys.com/writings/quicktips/ssh-tunnel.html 即可。该链接还提供了一个想法,即应该可以在 Python 脚本中使用 SSH 以使其更加方便。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 2011-09-17
      • 1970-01-01
      相关资源
      最近更新 更多