从套接字获取服务器名

问题描述:

我尝试编辑可用于嗅探SSL流量的mallory代理。然而,使用连接到服务器的服务器存在问题,例如, CloudFlare是因为无法获得真正的证书,而是来自前端的CloudFlare服务器。从套接字获取服务器名

由于这个原因,我想使用SSLContext.wrap_socket()中的server_hostname选项。但为此,我需要从Python套接字对象中获取目标服务器的名称。然而,我知道的唯一函数是getpeername(),但这只返回目标的ip。有人知道从套接字获取服务器名称的方法吗?

+0

这是HTTP吗?在这种情况下,您 - 很遗憾 - 需要从HTTP标头中提取“Host:”。 python ssl的''server_name''参数是SNI(服务器名称指示),因为目标主机的名称不能从连接中确定... – dhke 2015-03-03 10:29:20

+0

它适用于HTTP和HTTPS。这个解决方案有点令人不满意,因为我需要在真正的连接建立之前这样做,以伪造证书。 – 2015-03-03 10:38:41

+0

然后,您可能需要通过SSLContext.set_servername_callback()从传入的SSL套接字获取服务器名称。但请注意您的python版本的可用性:http://bugs.python.org/issue8109 ... – dhke 2015-03-03 10:42:03

解决方案dhke在评论中建议调用set_servername_callback(),的确是我搜索的解决方案,因为您可以看到here。然而,在mallory中使用它却不行,但那是另一个话题。