mitm_relay.py 文件源码

python
阅读 29 收藏 0 点赞 0 评论 0

项目:mitm_relay 作者: jrmdev 项目源码 文件源码
def do_relay_tcp(client_sock, server_sock, cfg):
    server_sock.settimeout(1.0)   
    client_sock.settimeout(1.0)

    server_peer = server_sock.getpeername()
    client_peer = client_sock.getpeername()

    while True:

        # Peek for the beginnings of an ssl handshake
        try:
            packet = client_sock.recv(BUFSIZE, socket.MSG_PEEK | socket.MSG_DONTWAIT)

            if packet.startswith('\x16\x03'): # SSL/TLS Handshake.

                if not (cfg.cert and cfg.key):
                    print color("[!] SSL/TLS handshake detected, provide a server cert and key to enable interception.", 1)

                else:
                    print color('------------------ Wrapping sockets ------------------', 2)
                    client_sock = ssl.wrap_socket(client_sock, server_side=True, suppress_ragged_eofs=True, certfile=cfg.cert.name, keyfile=cfg.key.name)
                    server_sock = ssl.wrap_socket(server_sock, suppress_ragged_eofs=True)
        except:
            pass

        receiving, _, _ = select([client_sock, server_sock], [], [])


        try:
            if client_sock in receiving:
                data_out = client_sock.recv(BUFSIZE)

                if not len(data_out): # client closed connection
                    print "[+] Client disconnected", client_peer
                    client_sock.close()
                    server_sock.close()
                    break

                data_out = proxify(data_out, cfg, client_peer, server_peer, to_server=True)
                server_sock.send(data_out)

            if server_sock in receiving:
                data_in = server_sock.recv(BUFSIZE)

                if not len(data_in): # server closed connection
                    print "[+] Server disconnected", server_peer
                    client_sock.close()
                    server_sock.close()
                    break

                data_in = proxify(data_in, cfg, client_peer, server_peer, to_server=False)
                client_sock.send(data_in)

        except socket.error as e:
            print color("[!] %s" % str(e))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号