如何处理套接字与浏览器之间的连接?

时间:2019-12-12 07:16:34

标签: python sockets proxy

我正在编写用于连接浏览器和网站的python套接字代理,但是我不知道如何处理HTTPS内容。 我建立了一个本地套接字服务器,以接收来自浏览器的请求,但是它向该套接字发送“ CONNECT ...”消息,因此我将connect()连接到目标站点,并向浏览器返回“ HTTP / 1.1 200建立连接”。 然后浏览器将加密的消息发送到套接字服务器,我无法解密它。我不知道浏览器如何在没有目标网站证书的情况下对其进行加密。 那么我该如何处理呢? connect()方法之后该怎么办? 这是我的代码。

import socket
from functions import get_addr_from_request

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 1081))
server.listen(5)

while True:
    browser, addr = server.accept()
    req = browser.recv(1024)
    host, port = get_addr_from_request(req) # It returns ('www.google.com', 443)
    if req.startswith(b'CONNECT'):
        s = socket.socket()
        try:
            s.connect((host, port))
        except socket.error as e:
            print(e); break
        browser.send(b'HTTP/1.1 200 Connection established\r\n\r\n')

    # browser.setblocking(0)
    # s.setblocking(0)
    while True:
        req = browser.recv(1024)
        print(b'req: ' + req)
        s.send(req)
        res = s.recv(1024)
        print(b'res: ' + res)
        browser.sendall(res)

0 个答案:

没有答案