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))
评论列表
文章目录