2

マイン クラフト サーバーに接続し、パケットを受信し、パケットを送信するスクリプトがあります。

したがって、「ログイン」パケットを送信し、「ログイン」パケットを受信します。残念ながら、受信したログイン パケットはエンコードされています (エンコードに関する情報はこちら: http://wiki.vg/Protocol#0x01 )。

受信したログイン パケットは、 という名前の変数に格納されますreceived_login_packet。パケットの種類、次元など、データの個別のビットを取得できるように、それをデコードする必要があります...

少し調べてみましたが、これを行う方法についてはまったくわかりません。

それが役立つ場合のコードは次のとおりです。

#encoding the packet to send
encuserlen = str(len(enc_user)) # enc_user is just my username
packfmt = '>bih%sshiibBB' % encuserlen
packetbytes = struct.pack(packfmt, 1, 28, len(data['user']), enc_user, 0, 0, 0, 0, 0, 0)
s.send(packetbytes)
time.sleep(2)
#login packet sent, waited for response
response = s.recv(1024) #this is the raw login response.
#it's encoded as detailed above. i want to decode it

十分に明確でない場合は、遠慮なく言ってください。

4

1 に答える 1

0

したがって、私がこの権利を理解している場合は、1024 バイトのパケット応答をデコードして、正しい情報を取得する必要があります。struct.pack ステートメントを使用できたようです。ドキュメントに見られるように、unpack に同様のステートメントがあります。基本的にはこんな感じです。

packfmt = '>issiibBB'
output=struct.unpack(packfmt,response)

また、あなたのリクエストが正しく送信されているかどうかは確信が持てませんが、それを設定する方法を理解するための演習として残しておきます. フォーマット文字列を参照してください。

于 2012-03-07T15:13:05.733 に答える