Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何代理和记录SSL流量_Python_Sockets_Ssl_Https_Proxy - Fatal编程技术网

Python 如何代理和记录SSL流量

Python 如何代理和记录SSL流量,python,sockets,ssl,https,proxy,Python,Sockets,Ssl,Https,Proxy,我在我的机器上运行一个本地HTTP代理服务器并执行一些日志记录。我还想记录SSL流量。为此,我运行了另一个用Python编写的代理服务器,它作为SSL服务器,使用我的自签名证书,HTTP服务器forwads将请求连接到该服务器。SSL代理用于SSL处理“SSL”标准Python模块。此SSL代理应将SSL通信转发到目标web服务器 HTTP代理成功转发来自浏览器的连接请求,并且浏览器与SSL代理之间的连接建立OK。SSL代理使用SSL套接字函数“read”从浏览器接收SSL数据包,该函数可能会返

我在我的机器上运行一个本地HTTP代理服务器并执行一些日志记录。我还想记录SSL流量。为此,我运行了另一个用Python编写的代理服务器,它作为SSL服务器,使用我的自签名证书,HTTP服务器forwads将请求连接到该服务器。SSL代理用于SSL处理“SSL”标准Python模块。此SSL代理应将SSL通信转发到目标web服务器

HTTP代理成功转发来自浏览器的连接请求,并且浏览器与SSL代理之间的连接建立OK。SSL代理使用SSL套接字函数“read”从浏览器接收SSL数据包,该函数可能会返回已解密的数据。这是在SSL代理上接收的示例数据包:

'\x16\x03\x01\x00\xc5\x01\x00\x00\xc1\x03\x03\xeb\xd09\x12\xe3=$Id:\xe5\xf9<Px\xf0\xda\x81R&\x02\xcau\xd2t=@\xe9\x95\xf8\x7f\x86\x00\x00\x18\xc0+\xc0/\xc0\n\xc0\t\xc0\x13\xc0\x14\x003\x002\x009\x00/\x005\x00\n\x01\x00\x00\x80\x00\x00\x00\x17\x00\x15\x00\x00\x12wiki.archlinux.org\xff\x01\x00\x01\x00\x00\n\x00\x08\x00\x06\x00\x17\x00\x18\x00\x19\x00\x0b\x00\x02\x01\x00\x00#\x00\x003t\x00\x00\x00\x10\x00#\x00!\x05h2-15\x05h2-14\x02h2\x08spdy/3.1\x08http/1.1\x00\x05\x00\x05\x01\x00\x00\x00\x00\x00\r\x00\x12\x00\x10\x04\x01\x05\x01\x02\x01\x04\x03\x05\x03\x02\x03\x04\x02\x02\x02'

”\x16\x03\x01\x00\xc5\x01\x00\x00\x00\xc1\x03\x03\xeb\xd09\x12\xe3=$Id:\xe5\xf9这些数据的一般格式在下文的RFC中进行了描述。您需要解析的是类似ASN.1的解析器。但在你这么做之前,你应该了解你得到的是什么样的信息。否则,您将发现太晚,在所有情况下都无法在SSL数据中找到目标服务器,因为只有在客户机使用服务器名称指示扩展时才会给出目标服务器。虽然所有的现代浏览器都会这样做,但较旧的浏览器不会,一些移动应用程序或脚本也不会这样做。这意味着您应该使用CONNECT请求中给定的目标

有关如何编写此类代理的更多详细信息,我建议您看看哪些代理可能已经完成了您试图实现的功能,或者提供了帮助您编写自己的代理的库。它是用python编写的,因此您至少可以从开源中学习如何实现必要的功能