0x00 前言
无聊之余看到XT博客说,使用python创建TCP代理,也来搞了一下,代码无优化,借鉴cnblogs大佬shaoshao的代码,进一步改良。只提供一个轮子,轮子之旅开始。
0x01 XT写的代码
import sys
import threading
import socket
def server_loop(local_host,local_port,remote_host,remote_port,receive_first):
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
server.blind((local_host,local_port))
except:
print “[!!] Failed to listen on %s:%d” % (local_host,local_port)
print “[!!] Check for other listing sockets or correct permissions.”
sys.exit(0)
print “[*] Listening on %s:%d” % (local_host,local_port)
server.listen(5)
while True:
client_socket,addr=server.accept()
print “[==>] Received incoming connection from %s:%d %(addr[0],addr[1])”
proxy_thread=threading.Thread(target=proxy_handler,args=(client_socket,remote_host,remote_port,receive_first))
proxy_thread.start()
def proxy_handler(client_socket,remote_host,remote_port,receive_first):
remote_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
remote_socket.connect((remote_host,remote_port))
if receive_first:
remote_buffer=receive_from(remote_socket)
hexdump(remote_buffer)
remote_buffer=response_handler(remote_buffer)
if len(remote_buffer):
print “[<==] Sening %d bytes to localhost.” % len(remote_buffer)
client_socket.send(remote_buffer)
while True:
local_buffer=receive_from(cilent_socket)
if len(local_buffer):
print “[==>] Received %d bytes from localhost.” % len(local_buffer)
hexdump(local_buffer)
local_buffer=request_handler(local_buffer)
remote_socket.send(local_buffer)
print “[==>] Send to remote.”
remote_buffer&#