Skip to content

server_py3.8+.py #17

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 22 additions & 25 deletions server.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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
Expand Down Expand Up @@ -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__)
Expand All @@ -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)
Expand All @@ -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)
Expand All @@ -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={

Expand Down Expand Up @@ -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()