From 3d926522016deb03e08dcdef914a6f16699d1a1c Mon Sep 17 00:00:00 2001 From: andy <1414772332@qq.com> Date: Tue, 8 Oct 2024 23:57:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E4=B8=AD=E6=96=87=E6=97=A5?= =?UTF-8?q?=E5=BF=97=20=E8=B0=83=E6=95=B4=E4=B8=80=E4=BA=9B=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + log.py | 28 ++++++++++++++++++++++++++++ server.py | 20 +++----------------- target.py | 8 +++++--- target_client.py | 48 +++++++++++++++++++----------------------------- target_server.py | 47 +++++++++++++++++++++-------------------------- 6 files changed, 77 insertions(+), 75 deletions(-) create mode 100644 log.py diff --git a/.gitignore b/.gitignore index c18dd8d..5b478e6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ __pycache__/ +*.log diff --git a/log.py b/log.py new file mode 100644 index 0000000..49ee0c2 --- /dev/null +++ b/log.py @@ -0,0 +1,28 @@ +import time + + + +# 同一个进程中所有调用这个文件的 .py 文件都使用这个变量 +_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) + print(_time(), *args, **kwargs) + kwargs["file"]=_log_fp + result = func(_time(),*args, **kwargs) + _log_fp.flush() + return result + return wrapper + +myprint=myprint_dec(print) + +def log_init(file_name:str): + global _log_fp + if _log_fp is None: + _log_fp=open(file_name,mode="w+",encoding="utf-8") + diff --git a/server.py b/server.py index d71be4b..83e5501 100644 --- a/server.py +++ b/server.py @@ -8,6 +8,8 @@ import time import prot_codec as pc import target as tg +from log import myprint +from log import log_init @@ -15,22 +17,6 @@ import target as tg SERVER_PORT = 5345 -_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) @@ -79,5 +65,5 @@ def start_service(): if __name__ == "__main__": - _log_fp=open("proxy_server.log",mode="w+",encoding="utf-8") + log_init("proxy_service.log") start_service() diff --git a/target.py b/target.py index e2814e2..81d17c4 100644 --- a/target.py +++ b/target.py @@ -7,6 +7,8 @@ import socket import prot_codec as pc +from log import myprint +from log import log_init @@ -40,7 +42,7 @@ class tcp_target(object): global _tcp_server # 解包查看数据类型 cmd,data=pc.decode(recv_data) - print(cmd.decode('utf-8')) + myprint(cmd.decode('utf-8')) j=json.loads(cmd) if(j["device"]=="client"): if(j["option"]=="login"): @@ -72,12 +74,12 @@ class tcp_target(object): try: _tcp_client.send(data) except Exception as e: - print("target_close:",str(e)) + myprint("target_close:",str(e)) if(_tcp_server is not None): try: _tcp_server.send(data) except Exception as e: - print("target_close:",str(e)) + myprint("target_close:",str(e)) diff --git a/target_client.py b/target_client.py index 30b56bf..32ed35f 100644 --- a/target_client.py +++ b/target_client.py @@ -10,6 +10,8 @@ import time import prot_codec as pc +from log import myprint +from log import log_init @@ -27,22 +29,6 @@ _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) @@ -52,27 +38,28 @@ myprint=myprint_dec(print) def send_to(ip,port,data:bytearray): for item in _local_client: if(item[1]==ip and item[2]==port): - myprint(f"recv from remote {ip},{port}") item[0].send(data) return - myprint(f"can not fond {ip},{port}") + myprint(f"can not fond {ip}:{port}") # 关闭指定地址的端口 def close(ip,port): + global _local_client for item in _local_client: if(item[1]==ip and item[2]==port): - myprint(f'remote close {ip},{port}') + myprint(f'断开连接 {ip}:{port}') item[0].close() _local_client.remove(item) break # 关闭所有 def close_all(): + global _local_client for item in _local_client: item[0].close() _local_client=[] - myprint('remote close all') + myprint('连接列表已清空') @@ -92,7 +79,7 @@ def remote_client_handler(tcp_remote:socket): try: recv = tcp_remote.recv(4096) except Exception as e: - myprint("remote:",str(e)) + myprint("代理服务器连接异常",str(e)) break if recv: recv_data+=recv @@ -107,11 +94,14 @@ def remote_client_handler(tcp_remote:socket): j=json.loads(cmd) if(j['device']=='server'): if(j['option']=='data'): + myprint(f"收到数据 {j['ip']}:{j['port']}") send_to(j['ip'],j['port'],data) elif(j['option']=='disconnect'): + myprint(f"收到服务器的断开通知 {j['ip']}:{j['port']}") close(j['ip'],j['port']) elif(j['device']=='proxy'): if(j['option']=='close'): + myprint("收到代理服务器的断开通知") close_all() except Exception as e: myprint(str(e)) @@ -119,7 +109,7 @@ def remote_client_handler(tcp_remote:socket): else: break tcp_remote.close() - myprint("proxy close") + myprint("代理服务器已断开") close_all() if _local_server is not None: _local_server.close() @@ -148,18 +138,18 @@ def local_client_handler(tcp_server:socket,addr): data=pc.encode(json.dumps(cmd).encode('utf-8'),recv) if _remote_client is not None: _remote_client.send(data) - myprint(f"send to remote {addr[0]},{addr[1]}") + myprint(f"发送数据 {addr[0]}:{addr[1]}") else: break - tcp_server.close() + close(addr[0],addr[1]) + cmd={'device':'client','option':'disconnect','ip':addr[0],'port':addr[1]} + data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default') if(_remote_client is not None): - cmd={'device':'client','option':'disconnect','ip':addr[0],'port':addr[1]} - data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default') try: + myprint(f"发送断开通知到服务器端 {addr[0]}:{addr[1]}") _remote_client.send(data) except Exception as e: - myprint("remote close",str(e)) - _local_client.remove(addr_info) + myprint("远端连接异常",str(e)) @@ -188,6 +178,6 @@ def main(): if __name__ == "__main__": - _log_fp=open("target_client.log",mode="w+",encoding="utf-8") + log_init("target_client.log") main() diff --git a/target_server.py b/target_server.py index 31d684c..341811c 100644 --- a/target_server.py +++ b/target_server.py @@ -9,6 +9,8 @@ import time import prot_codec as pc +from log import myprint +from log import log_init @@ -30,26 +32,10 @@ _local_client=[] # LOCAL_SERVER_IP = ("192.168.3.166",80) # LOCAL_SERVER_IP = ("192.168.3.167",22) -LOCAL_SERVER_IP = ("10.0.24.251",80) +LOCAL_SERVER_IP = ("192.168.3.174",22) -_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) @@ -59,15 +45,15 @@ myprint=myprint_dec(print) def send_to(ip,port,data:bytearray): for item in _local_client: if(item[1]==ip and item[2]==port): - myprint(f"recv from remote {ip},{port}") item[0].send(data) break # 关闭指定地址的端口 def close(ip,port): + global _local_client for item in _local_client: if(item[1]==ip and item[2]==port): - myprint(f"remote close:{ip},{port}") + myprint(f"断开连接 {ip}:{port}") item[0].close() # 删除已被关闭的条目 _local_client.remove(item) @@ -75,11 +61,12 @@ def close(ip,port): # 关闭所有 def close_all(): + global _local_client for item in _local_client: item[0].close() # 关闭端口之后把列表置空 _local_client=[] - myprint('remote close all') + myprint('连接列表已清空') @@ -94,24 +81,28 @@ def local_client_handler(tcp_server:socket,ip,port): try: recv = tcp_server.recv(4096) except Exception as e: - myprint("local:",str(e)) + myprint("本地连接异常",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) - myprint(f"send to remote {ip},{port}") + myprint(f"发送数据到客户端 {ip}:{port}") else: break tcp_server.close() - _local_client.remove(self_info) + close(ip,port) # 发送连接断开的消息 cmd={'device':'server','option':'disconnect','ip':ip,'port':port} data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default') if _remote_client is not None: - _remote_client.send(data) + try: + myprint(f"发送断开通知到客户端 {ip}:{port}") + _remote_client.send(data) + except Exception as e: + myprint("远端连接异常",str(e)) @@ -144,16 +135,20 @@ def remote_client_handler(tcp_client_1:socket): j=json.loads(cmd) if(j['device']=='client'): if(j['option']=='connect'): + myprint("收到客户端的连接通知") temp = socket.socket(socket.AF_INET,socket.SOCK_STREAM) temp.connect(LOCAL_SERVER_IP) thd = threading.Thread(target = local_client_handler, args = (temp,j['ip'],j['port'])) thd.start() elif(j['option']=='disconnect'): + myprint(f"收到客户端的断开通知 {j['ip']}:{j['port']}") close(j['ip'],j['port']) elif(j['option']=='data'): + myprint(f"收到数据 {j['ip']}:{j['port']}") send_to(j['ip'],j['port'],data) elif(j['device']=='proxy'): if(j['option']=='close'): + myprint("收到代理服务器的断开通知") close_all() except Exception as e: myprint(str(e)) @@ -161,7 +156,7 @@ def remote_client_handler(tcp_client_1:socket): else: break tcp_client_1.close() - myprint("proxy close.") + myprint("与代理服务器的连接已断开") close_all() @@ -182,6 +177,6 @@ def main(): if __name__ == "__main__": - _log_fp=open("target_server.log",mode="w+",encoding="utf-8") + log_init("target_server.log") main()