From dd9b110adbb1ef45010d50db2f83c54e171ebd2c Mon Sep 17 00:00:00 2001 From: andy <1414772332@qq.com> Date: Tue, 8 Oct 2024 20:29:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=88=B0=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.py | 2 +- target_client.py | 57 +++++++++++++++++++++++++++++++++++------------- target_server.py | 44 ++++++++++++++++++++++++++++--------- 3 files changed, 77 insertions(+), 26 deletions(-) diff --git a/server.py b/server.py index 4579c08..d71be4b 100644 --- a/server.py +++ b/server.py @@ -79,5 +79,5 @@ def start_service(): if __name__ == "__main__": - _log_fp=open("tcp_tran_server.log",mode="w+",encoding="utf-8") + _log_fp=open("proxy_server.log",mode="w+",encoding="utf-8") start_service() diff --git a/target_client.py b/target_client.py index aa10c0b..30b56bf 100644 --- a/target_client.py +++ b/target_client.py @@ -26,39 +26,64 @@ _local_client=[] _local_server=None + +_log_fp=None + +def _time(): + return '['+time.strftime("%Y-%m-%d %H:%M:%S")+']' + +def myprint_dec(func): + def wrapper(*args, **kwargs): + # 在这里添加额外的功能 + # print(_time(), str(e),file=_log_fp) + kwargs["file"]=_log_fp + result = func(_time(),*args, **kwargs) + _log_fp.flush() + return result + return wrapper + +myprint=myprint_dec(print) + + + + + # 发送数据到指定ip地址和端口 def send_to(ip,port,data:bytearray): for item in _local_client: if(item[1]==ip and item[2]==port): - print(f"recv from remote {ip},{port}") + myprint(f"recv from remote {ip},{port}") item[0].send(data) return - print(f"can not fond {ip},{port}") + myprint(f"can not fond {ip},{port}") # 关闭指定地址的端口 def close(ip,port): for item in _local_client: if(item[1]==ip and item[2]==port): - print(f'remote close {ip},{port}') + myprint(f'remote close {ip},{port}') item[0].close() + _local_client.remove(item) break # 关闭所有 def close_all(): for item in _local_client: item[0].close() - print('remote close all') + _local_client=[] + myprint('remote close all') # 远端数据处理,解包,把负载数据发送到本地服务器 +# 这个线程只会创建一个,用于连接代理服务器 def remote_client_handler(tcp_remote:socket): global _remote_client global _local_client global _local_server - print("已连接代理服务器") + myprint("已连接代理服务器") recv_data=bytearray() cmd={'device':'client','option':'login'} data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default') @@ -67,7 +92,7 @@ def remote_client_handler(tcp_remote:socket): try: recv = tcp_remote.recv(4096) except Exception as e: - print("remote:",str(e)) + myprint("remote:",str(e)) break if recv: recv_data+=recv @@ -77,7 +102,7 @@ def remote_client_handler(tcp_remote:socket): if(start==-1 or end==-1): break cmd,data=pc.decode(recv_data[start:end+1]) - print(cmd.decode('utf-8')) + myprint(cmd.decode('utf-8')) try: j=json.loads(cmd) if(j['device']=='server'): @@ -89,22 +114,23 @@ def remote_client_handler(tcp_remote:socket): if(j['option']=='close'): close_all() except Exception as e: - print(str(e)) + myprint(str(e)) recv_data=recv_data[end+1:] else: break tcp_remote.close() - print("proxy close") + myprint("proxy close") close_all() if _local_server is not None: _local_server.close() # 本地数据处理,解包,把负载数据发送到本地服务器 +# 每个本地连接都会创建一个线程 def local_client_handler(tcp_server:socket,addr): global _remote_client global _local_client - print("addr:",addr) + myprint("addr:",addr) addr_info=(tcp_server,addr[0],addr[1]) _local_client.append(addr_info) if(_remote_client is not None): @@ -115,14 +141,14 @@ def local_client_handler(tcp_server:socket,addr): try: recv = tcp_server.recv(4096) except Exception as e: - print("local:",str(e)) + myprint("local:",str(e)) break if recv: cmd={'device':'client','option':'data','ip':addr[0],'port':addr[1]} data=pc.encode(json.dumps(cmd).encode('utf-8'),recv) if _remote_client is not None: _remote_client.send(data) - print(f"send to remote {addr[0]},{addr[1]}") + myprint(f"send to remote {addr[0]},{addr[1]}") else: break tcp_server.close() @@ -132,7 +158,7 @@ def local_client_handler(tcp_server:socket,addr): try: _remote_client.send(data) except Exception as e: - print("remote close",str(e)) + myprint("remote close",str(e)) _local_client.remove(addr_info) @@ -149,18 +175,19 @@ def main(): _local_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) _local_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) _local_server.bind(("",_LOCAL_PORT)) - print(f"开始监听({_LOCAL_PORT})") + myprint(f"开始监听({_LOCAL_PORT})") _local_server.listen(128) while True: try: temp , temp_address = _local_server.accept() except Exception as e: - print("local server:",str(e)) + myprint("local server:",str(e)) break thd = threading.Thread(target = local_client_handler, args = (temp,temp_address)) thd.start() if __name__ == "__main__": + _log_fp=open("target_client.log",mode="w+",encoding="utf-8") main() diff --git a/target_server.py b/target_server.py index afa1180..31d684c 100644 --- a/target_server.py +++ b/target_server.py @@ -5,6 +5,7 @@ import sys import json import socket import threading +import time import prot_codec as pc @@ -23,6 +24,7 @@ import prot_codec as pc # 保存连接代理服务器的端口 _remote_client=None # 保存本地连接的tcp客户端端口列表 +# 这个列表的ip和port地址和target_client.py中的同名变量一一对应 _local_client=[] @@ -32,11 +34,32 @@ LOCAL_SERVER_IP = ("10.0.24.251",80) +_log_fp=None + +def _time(): + return '['+time.strftime("%Y-%m-%d %H:%M:%S")+']' + +def myprint_dec(func): + def wrapper(*args, **kwargs): + # 在这里添加额外的功能 + # print(_time(), str(e),file=_log_fp) + kwargs["file"]=_log_fp + result = func(_time(),*args, **kwargs) + _log_fp.flush() + return result + return wrapper + +myprint=myprint_dec(print) + + + + + # 发送数据到指定ip地址和端口 def send_to(ip,port,data:bytearray): for item in _local_client: if(item[1]==ip and item[2]==port): - print(f"recv from remote {ip},{port}") + myprint(f"recv from remote {ip},{port}") item[0].send(data) break @@ -44,7 +67,7 @@ def send_to(ip,port,data:bytearray): def close(ip,port): for item in _local_client: if(item[1]==ip and item[2]==port): - print(f"remote close:{ip},{port}") + myprint(f"remote close:{ip},{port}") item[0].close() # 删除已被关闭的条目 _local_client.remove(item) @@ -56,7 +79,7 @@ def close_all(): item[0].close() # 关闭端口之后把列表置空 _local_client=[] - print('remote close all') + myprint('remote close all') @@ -71,14 +94,14 @@ def local_client_handler(tcp_server:socket,ip,port): try: recv = tcp_server.recv(4096) except Exception as e: - print("local:",str(e)) + myprint("local:",str(e)) break if recv: cmd={'device':'server','option':'data','ip':ip,'port':port} data=pc.encode(json.dumps(cmd).encode('utf-8'),recv) if _remote_client is not None: _remote_client.send(data) - print(f"send to remote {ip},{port}") + myprint(f"send to remote {ip},{port}") else: break @@ -97,7 +120,7 @@ def local_client_handler(tcp_server:socket,ip,port): def remote_client_handler(tcp_client_1:socket): global _remote_client global _local_client - print("已连接代理服务器") + myprint("已连接代理服务器") cmd={'device':'server','option':'login'} data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default') _remote_client.send(data) @@ -106,7 +129,7 @@ def remote_client_handler(tcp_client_1:socket): try: recv = tcp_client_1.recv(4096) except Exception as e: - print("remote:",str(e)) + myprint("remote:",str(e)) break if recv: recv_data+=recv @@ -116,7 +139,7 @@ def remote_client_handler(tcp_client_1:socket): if(start == -1 or end == -1): break cmd,data=pc.decode(recv_data[start:end+1]) - print(cmd.decode('utf-8')) + myprint(cmd.decode('utf-8')) try: j=json.loads(cmd) if(j['device']=='client'): @@ -133,12 +156,12 @@ def remote_client_handler(tcp_client_1:socket): if(j['option']=='close'): close_all() except Exception as e: - print(str(e)) + myprint(str(e)) recv_data=recv_data[end+1:] else: break tcp_client_1.close() - print("proxy close.") + myprint("proxy close.") close_all() @@ -159,5 +182,6 @@ def main(): if __name__ == "__main__": + _log_fp=open("target_server.log",mode="w+",encoding="utf-8") main()