添加日志记录到文件
This commit is contained in:
@@ -79,5 +79,5 @@ def start_service():
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
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()
|
start_service()
|
||||||
|
@@ -26,39 +26,64 @@ _local_client=[]
|
|||||||
_local_server=None
|
_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地址和端口
|
# 发送数据到指定ip地址和端口
|
||||||
def send_to(ip,port,data:bytearray):
|
def send_to(ip,port,data:bytearray):
|
||||||
for item in _local_client:
|
for item in _local_client:
|
||||||
if(item[1]==ip and item[2]==port):
|
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)
|
item[0].send(data)
|
||||||
return
|
return
|
||||||
print(f"can not fond {ip},{port}")
|
myprint(f"can not fond {ip},{port}")
|
||||||
|
|
||||||
|
|
||||||
# 关闭指定地址的端口
|
# 关闭指定地址的端口
|
||||||
def close(ip,port):
|
def close(ip,port):
|
||||||
for item in _local_client:
|
for item in _local_client:
|
||||||
if(item[1]==ip and item[2]==port):
|
if(item[1]==ip and item[2]==port):
|
||||||
print(f'remote close {ip},{port}')
|
myprint(f'remote close {ip},{port}')
|
||||||
item[0].close()
|
item[0].close()
|
||||||
|
_local_client.remove(item)
|
||||||
break
|
break
|
||||||
|
|
||||||
# 关闭所有
|
# 关闭所有
|
||||||
def close_all():
|
def close_all():
|
||||||
for item in _local_client:
|
for item in _local_client:
|
||||||
item[0].close()
|
item[0].close()
|
||||||
print('remote close all')
|
_local_client=[]
|
||||||
|
myprint('remote close all')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 远端数据处理,解包,把负载数据发送到本地服务器
|
# 远端数据处理,解包,把负载数据发送到本地服务器
|
||||||
|
# 这个线程只会创建一个,用于连接代理服务器
|
||||||
def remote_client_handler(tcp_remote:socket):
|
def remote_client_handler(tcp_remote:socket):
|
||||||
global _remote_client
|
global _remote_client
|
||||||
global _local_client
|
global _local_client
|
||||||
global _local_server
|
global _local_server
|
||||||
print("已连接代理服务器")
|
myprint("已连接代理服务器")
|
||||||
recv_data=bytearray()
|
recv_data=bytearray()
|
||||||
cmd={'device':'client','option':'login'}
|
cmd={'device':'client','option':'login'}
|
||||||
data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default')
|
data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default')
|
||||||
@@ -67,7 +92,7 @@ def remote_client_handler(tcp_remote:socket):
|
|||||||
try:
|
try:
|
||||||
recv = tcp_remote.recv(4096)
|
recv = tcp_remote.recv(4096)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("remote:",str(e))
|
myprint("remote:",str(e))
|
||||||
break
|
break
|
||||||
if recv:
|
if recv:
|
||||||
recv_data+=recv
|
recv_data+=recv
|
||||||
@@ -77,7 +102,7 @@ def remote_client_handler(tcp_remote:socket):
|
|||||||
if(start==-1 or end==-1):
|
if(start==-1 or end==-1):
|
||||||
break
|
break
|
||||||
cmd,data=pc.decode(recv_data[start:end+1])
|
cmd,data=pc.decode(recv_data[start:end+1])
|
||||||
print(cmd.decode('utf-8'))
|
myprint(cmd.decode('utf-8'))
|
||||||
try:
|
try:
|
||||||
j=json.loads(cmd)
|
j=json.loads(cmd)
|
||||||
if(j['device']=='server'):
|
if(j['device']=='server'):
|
||||||
@@ -89,22 +114,23 @@ def remote_client_handler(tcp_remote:socket):
|
|||||||
if(j['option']=='close'):
|
if(j['option']=='close'):
|
||||||
close_all()
|
close_all()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(str(e))
|
myprint(str(e))
|
||||||
recv_data=recv_data[end+1:]
|
recv_data=recv_data[end+1:]
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
tcp_remote.close()
|
tcp_remote.close()
|
||||||
print("proxy close")
|
myprint("proxy close")
|
||||||
close_all()
|
close_all()
|
||||||
if _local_server is not None:
|
if _local_server is not None:
|
||||||
_local_server.close()
|
_local_server.close()
|
||||||
|
|
||||||
|
|
||||||
# 本地数据处理,解包,把负载数据发送到本地服务器
|
# 本地数据处理,解包,把负载数据发送到本地服务器
|
||||||
|
# 每个本地连接都会创建一个线程
|
||||||
def local_client_handler(tcp_server:socket,addr):
|
def local_client_handler(tcp_server:socket,addr):
|
||||||
global _remote_client
|
global _remote_client
|
||||||
global _local_client
|
global _local_client
|
||||||
print("addr:",addr)
|
myprint("addr:",addr)
|
||||||
addr_info=(tcp_server,addr[0],addr[1])
|
addr_info=(tcp_server,addr[0],addr[1])
|
||||||
_local_client.append(addr_info)
|
_local_client.append(addr_info)
|
||||||
if(_remote_client is not None):
|
if(_remote_client is not None):
|
||||||
@@ -115,14 +141,14 @@ def local_client_handler(tcp_server:socket,addr):
|
|||||||
try:
|
try:
|
||||||
recv = tcp_server.recv(4096)
|
recv = tcp_server.recv(4096)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("local:",str(e))
|
myprint("local:",str(e))
|
||||||
break
|
break
|
||||||
if recv:
|
if recv:
|
||||||
cmd={'device':'client','option':'data','ip':addr[0],'port':addr[1]}
|
cmd={'device':'client','option':'data','ip':addr[0],'port':addr[1]}
|
||||||
data=pc.encode(json.dumps(cmd).encode('utf-8'),recv)
|
data=pc.encode(json.dumps(cmd).encode('utf-8'),recv)
|
||||||
if _remote_client is not None:
|
if _remote_client is not None:
|
||||||
_remote_client.send(data)
|
_remote_client.send(data)
|
||||||
print(f"send to remote {addr[0]},{addr[1]}")
|
myprint(f"send to remote {addr[0]},{addr[1]}")
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
tcp_server.close()
|
tcp_server.close()
|
||||||
@@ -132,7 +158,7 @@ def local_client_handler(tcp_server:socket,addr):
|
|||||||
try:
|
try:
|
||||||
_remote_client.send(data)
|
_remote_client.send(data)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("remote close",str(e))
|
myprint("remote close",str(e))
|
||||||
_local_client.remove(addr_info)
|
_local_client.remove(addr_info)
|
||||||
|
|
||||||
|
|
||||||
@@ -149,18 +175,19 @@ def main():
|
|||||||
_local_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
_local_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
||||||
_local_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
|
_local_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
|
||||||
_local_server.bind(("",_LOCAL_PORT))
|
_local_server.bind(("",_LOCAL_PORT))
|
||||||
print(f"开始监听({_LOCAL_PORT})")
|
myprint(f"开始监听({_LOCAL_PORT})")
|
||||||
_local_server.listen(128)
|
_local_server.listen(128)
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
temp , temp_address = _local_server.accept()
|
temp , temp_address = _local_server.accept()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("local server:",str(e))
|
myprint("local server:",str(e))
|
||||||
break
|
break
|
||||||
thd = threading.Thread(target = local_client_handler, args = (temp,temp_address))
|
thd = threading.Thread(target = local_client_handler, args = (temp,temp_address))
|
||||||
thd.start()
|
thd.start()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
_log_fp=open("target_client.log",mode="w+",encoding="utf-8")
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@@ -5,6 +5,7 @@ import sys
|
|||||||
import json
|
import json
|
||||||
import socket
|
import socket
|
||||||
import threading
|
import threading
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
import prot_codec as pc
|
import prot_codec as pc
|
||||||
@@ -23,6 +24,7 @@ import prot_codec as pc
|
|||||||
# 保存连接代理服务器的端口
|
# 保存连接代理服务器的端口
|
||||||
_remote_client=None
|
_remote_client=None
|
||||||
# 保存本地连接的tcp客户端端口列表
|
# 保存本地连接的tcp客户端端口列表
|
||||||
|
# 这个列表的ip和port地址和target_client.py中的同名变量一一对应
|
||||||
_local_client=[]
|
_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地址和端口
|
# 发送数据到指定ip地址和端口
|
||||||
def send_to(ip,port,data:bytearray):
|
def send_to(ip,port,data:bytearray):
|
||||||
for item in _local_client:
|
for item in _local_client:
|
||||||
if(item[1]==ip and item[2]==port):
|
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)
|
item[0].send(data)
|
||||||
break
|
break
|
||||||
|
|
||||||
@@ -44,7 +67,7 @@ def send_to(ip,port,data:bytearray):
|
|||||||
def close(ip,port):
|
def close(ip,port):
|
||||||
for item in _local_client:
|
for item in _local_client:
|
||||||
if(item[1]==ip and item[2]==port):
|
if(item[1]==ip and item[2]==port):
|
||||||
print(f"remote close:{ip},{port}")
|
myprint(f"remote close:{ip},{port}")
|
||||||
item[0].close()
|
item[0].close()
|
||||||
# 删除已被关闭的条目
|
# 删除已被关闭的条目
|
||||||
_local_client.remove(item)
|
_local_client.remove(item)
|
||||||
@@ -56,7 +79,7 @@ def close_all():
|
|||||||
item[0].close()
|
item[0].close()
|
||||||
# 关闭端口之后把列表置空
|
# 关闭端口之后把列表置空
|
||||||
_local_client=[]
|
_local_client=[]
|
||||||
print('remote close all')
|
myprint('remote close all')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -71,14 +94,14 @@ def local_client_handler(tcp_server:socket,ip,port):
|
|||||||
try:
|
try:
|
||||||
recv = tcp_server.recv(4096)
|
recv = tcp_server.recv(4096)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("local:",str(e))
|
myprint("local:",str(e))
|
||||||
break
|
break
|
||||||
if recv:
|
if recv:
|
||||||
cmd={'device':'server','option':'data','ip':ip,'port':port}
|
cmd={'device':'server','option':'data','ip':ip,'port':port}
|
||||||
data=pc.encode(json.dumps(cmd).encode('utf-8'),recv)
|
data=pc.encode(json.dumps(cmd).encode('utf-8'),recv)
|
||||||
if _remote_client is not None:
|
if _remote_client is not None:
|
||||||
_remote_client.send(data)
|
_remote_client.send(data)
|
||||||
print(f"send to remote {ip},{port}")
|
myprint(f"send to remote {ip},{port}")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
@@ -97,7 +120,7 @@ def local_client_handler(tcp_server:socket,ip,port):
|
|||||||
def remote_client_handler(tcp_client_1:socket):
|
def remote_client_handler(tcp_client_1:socket):
|
||||||
global _remote_client
|
global _remote_client
|
||||||
global _local_client
|
global _local_client
|
||||||
print("已连接代理服务器")
|
myprint("已连接代理服务器")
|
||||||
cmd={'device':'server','option':'login'}
|
cmd={'device':'server','option':'login'}
|
||||||
data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default')
|
data=pc.encode(json.dumps(cmd).encode('utf-8'),b'default')
|
||||||
_remote_client.send(data)
|
_remote_client.send(data)
|
||||||
@@ -106,7 +129,7 @@ def remote_client_handler(tcp_client_1:socket):
|
|||||||
try:
|
try:
|
||||||
recv = tcp_client_1.recv(4096)
|
recv = tcp_client_1.recv(4096)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("remote:",str(e))
|
myprint("remote:",str(e))
|
||||||
break
|
break
|
||||||
if recv:
|
if recv:
|
||||||
recv_data+=recv
|
recv_data+=recv
|
||||||
@@ -116,7 +139,7 @@ def remote_client_handler(tcp_client_1:socket):
|
|||||||
if(start == -1 or end == -1):
|
if(start == -1 or end == -1):
|
||||||
break
|
break
|
||||||
cmd,data=pc.decode(recv_data[start:end+1])
|
cmd,data=pc.decode(recv_data[start:end+1])
|
||||||
print(cmd.decode('utf-8'))
|
myprint(cmd.decode('utf-8'))
|
||||||
try:
|
try:
|
||||||
j=json.loads(cmd)
|
j=json.loads(cmd)
|
||||||
if(j['device']=='client'):
|
if(j['device']=='client'):
|
||||||
@@ -133,12 +156,12 @@ def remote_client_handler(tcp_client_1:socket):
|
|||||||
if(j['option']=='close'):
|
if(j['option']=='close'):
|
||||||
close_all()
|
close_all()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(str(e))
|
myprint(str(e))
|
||||||
recv_data=recv_data[end+1:]
|
recv_data=recv_data[end+1:]
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
tcp_client_1.close()
|
tcp_client_1.close()
|
||||||
print("proxy close.")
|
myprint("proxy close.")
|
||||||
close_all()
|
close_all()
|
||||||
|
|
||||||
|
|
||||||
@@ -159,5 +182,6 @@ def main():
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
_log_fp=open("target_server.log",mode="w+",encoding="utf-8")
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user