2012-03-07 12 views
2

私は、鉱山工芸サーバーに接続し、パケットを受信し、パケットを送信するスクリプトを持っています。Python Parse Minecraftパケット

「ログイン」パケットを送信し、「ログイン」パケットを受信します。残念ながら、受信したログインパケットはエンコードされています(ここでのエンコードに関する情報: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 

任意の助けいただければ幸いですし、それが十分に明確でない場合は言うことを躊躇しないでください。

+0

それは十分ではありません。コードサンプルを含めてください。 – Will

+0

もっと良いですか?私はいくつかのコードを追加しましたが、実際にはあまり必要はありません。必要な情報のほとんどはwikiページにあります。 – Jack

答えて

0

私はこの権利を理解していれば、正確な情報を得るために、1024バイトのパケット応答をデコードする必要があります。 struct.packステートメントを使用することができたようですが、the documentationに見られるように、解凍する同様のステートメントがあります。基本的には、このように見えます。

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

はまた、私はあなたの要求が正しい送信されたことをかなり確信していないが、あなたはそれを設定する方法を把握するために、私は運動としてそれを残しておきます。 format stringsを参照してください。

+0

これは正しくはありませんでしたが、私の質問は不明であり、それを解く方法を手伝ってくれました。 – Jack

+0

あなたは私が作ったと思ったそのミスは何でしたか?私はそれを見つけるように見えない。 :/ – Jack

+0

@JackBeePee: 'packfmt = '> bih%sshiibBB''はまったく正しいとは思われません... – PearsonArtPhoto