Code: Alles auswählen
def prase_mc_packet(socket_obj, to_):
global packet_conntent
packet_conntent = bytes()
def socket_read(socket_obj, len_):
global packet_conntent
recv_packet = bytes()
while len_ != len(recv_packet):
recv_packet += socket_obj.recv(len_-len(recv_packet))
packet_conntent += recv_packet
return recv_packet
prased_packet_conntent = []
packet_type = socket_read(socket_obj, 1)
print('======', packet_type)
if type(packet_structs.structs[packet_type]) == tuple:
packet_struct = packet_structs.structs[packet_type]
else:
packet_struct = packet_structs.structs[packet_type][to_]
print(packet_struct)
for var_type in packet_struct:
if type(var_type) == tuple:
var_type = var_type[0]
if var_type == 'string16':
len_ = bitstring.BitStream(socket_read(socket_obj, 2)).read('uint:16')*2
prased_packet_conntent.append(bitstring.BitStream(socket_read(socket_obj, len_)).read('bytes:' + str(len_)).decode('utf-16be'))
elif var_type in ['bytes', 'bool']:
prased_packet_conntent.append(bitstring.BitStream(socket_read(socket_obj, 1)).read(var_type))
elif var_type.split(':')[0] in ['int', 'float']:
bitstream = bitstring.BitStream(socket_read(socket_obj, int(int(var_type.split(':')[1])//8)))
prased_packet_conntent.append(bitstream.read(var_type))
else:
print('UNKNOWN type:', var_type)
return [prased_packet_conntent, packet_conntent]
So und wer sich mal den Code unten ansieht wird merken das bis zum Fehler alles einwandfrei funktioniert ...
Code: Alles auswählen
====== b'\xfe'
()
CLIENT: [[], b'\xfe']
====== b'\xff'
('string16', 'reason')
UNKNOW type: reason
SERVER: [['/register wunschpw wunschpw§2§14'], b'\xff\x00 \x00/\x00r\x00e\x00g\x00i\x00s\x00t\x00e\x00r\x00 \x00w\x00u\x00n\x00s\x00c\x00h\x00p\x00w\x00 \x00w\x00u\x00n\x00s\x00c\x00h\x00p\x00w\x00\xa7\x002\x00\xa7\x001\x004']
('13.37.13.37', 1337) connected to server!
====== b'\x02'
('string16', 'username_host')
UNKNOW type: username_host
CLIENT: [['1337;13.37.13.37:25565'], b'\x02\x00\x16\x001\x003\x003\x007\x00;\x002\x00.\x002\x002\x00.\x001\x001\x00.\x001\x003\x007\x00:\x002\x005\x005\x006\x005']
====== b'\x02'
('string16', 'connection_hash')
UNKNOW type: connection_hash
SERVER: [['-'], b'\x02\x00\x01\x00-']
====== b'\x01'
(('int:32', 'protocol_version'), ('string16', 'username'), ('string16', 'not_used_1'), ('int:32', 'not_used_2'), ('int:32', 'not_used_3'), ('bytes', 'not_used_4'), ('bytes', 'not_used_5'), ('bytes', 'not_used_6'))
CLIENT: [[29, '1337', '', 0, 0, b'\x00', b'\x00', b'\x00'], b'\x01\x00\x00\x00\x1d\x00\x04\x001\x003\x003\x007\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00']
====== b'\x01'
(('int:32', 'entity_id'), ('string16', 'not_used_1'), ('string16', 'level_type'), ('int:32', 'game_mode'), ('int:32', 'dimension'), ('bytes', 'not_used_2'), ('bytes', 'world_height'), ('bytes', 'max_players'))
SERVER: [[94533, '', 'default', 0, 0, b'\x01', b'\x00', b'\x0e'], b'\x01\x00\x01qE\x00\x00\x00\x07\x00d\x00e\x00f\x00a\x00u\x00l\x00t\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x0e']
====== b'\r'
(('float:64', 'x'), ('float:64', 'y'), ('float:64', 'stance'), ('float:64', 'z'), ('float:32', 'yaw'), ('float:32', 'pitch'), ('bool', 'on_ground'))
CLIENT: [[8.5, 65.0, 66.62000000476837, 8.5, -180.0, 0.0, False], b'\r@!\x00\x00\x00\x00\x00\x00@P@\x00\x00\x00\x00\x00@P\xa7\xae\x14\x80\x00\x00@!\x00\x00\x00\x00\x00\x00\xc34\x00\x00\x00\x00\x00\x00\x00']
====== b'\xfa'
(('string16', 'channel'), ('int:16', 'data_size'))
SERVER: [['REGISTER', 6], b'\xfa\x00\x08\x00R\x00E\x00G\x00I\x00S\x00T\x00E\x00R\x00\x06']
====== b'\x0b'
(('float:64', 'x'), ('float:64', 'y'), ('float:64', 'stance'), ('float:64', 'z'), ('bool', 'on_ground'))
CLIENT: [[8.5, 64.92159999847412, 66.5416000032425, 8.5, False], b'\x0b@!\x00\x00\x00\x00\x00\x00@P:\xfb~\x8f\\)@P\xa2\xa9\x93\x0f\\)@!\x00\x00\x00\x00\x00\x00\x00']
====== b'W'
----------------------------------------
Exception happened during processing of request from ('13.37.13.37', 1337)
Traceback (most recent call last):
File "C:\Python31\lib\socketserver.py", line 558, in process_request_thread
self.finish_request(request, client_address)
File "C:\Python31\lib\socketserver.py", line 320, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Python31\lib\socketserver.py", line 614, in __init__
self.handle()
File , line 112, in handle
self.recv_server = prase_mc_packet(self.server_connect_socket, 'SERVER_TO_CLIENT')
File , line 25, in prase_mc_packet
if type(packet_structs.structs[packet_type]) == tuple:
KeyError: b'W'
----------------------------------------
In der Doku steht auch nichts von b'W' bzw. b'\x57' drinnen, also geht ich davon aus das in meinen praser ein Fehler ist, und sich dadurch irgendwas verschoben hat und dadruch das b'W' zum ersten Paketteil wird. Ich hab aber keine Ahnung wo der Fehler ist, weil ja der Rest funktioniert, einen Fehler vom Server kann ich eigentlich auch ausschließen, weil ich ja sonst auch drauf spielen kann.