python数据包的作用_使用Python将登录数据包发送到Minecraft服务器不起作用
我在Python中有以下腳本 . 它的作用是嘗試連接到MineCraft服務(wù)器,首先發(fā)送'handshake',然后發(fā)送登錄請(qǐng)求 . 協(xié)議規(guī)格可以在這里找到:http://wiki.vg/Protocol
無(wú)論如何,python腳本工作正常,沒(méi)有錯(cuò)誤 . 但是,我相當(dāng)使用我編碼第二個(gè)數(shù)據(jù)包錯(cuò)誤,因?yàn)樗l(fā)送時(shí),服務(wù)器控制臺(tái)上沒(méi)有任何內(nèi)容 . 播放器沒(méi)有連接或任何東西 . 由于“客戶端”沒(méi)有及時(shí)登錄,它最終會(huì)超時(shí)并關(guān)閉連接 .
基本上,無(wú)論如何誰(shuí)有struct.pack()的經(jīng)驗(yàn)應(yīng)該能夠在這里幫助我 . 我已經(jīng)評(píng)論了我不確定我是否已將所有內(nèi)容編碼正確的行 . 有關(guān)打包數(shù)據(jù)的詳細(xì)信息,請(qǐng)參見(jiàn)上面的鏈接 .
任何幫助將不勝感激,我對(duì)編碼/打包數(shù)據(jù)非常無(wú)能為力 . :(
import struct
import socket
import time
import urllib
import urllib2
host = "127.0.0.1"
port = 25566
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
logindata = {'user':'JackBeePee', 'password':'*******', 'version':'12'}
data = urllib.urlencode(logindata)
print('Sending data to login.minecraft.net...')
req = urllib2.Request('https://login.minecraft.net', data)
response = urllib2.urlopen(req)
returndata = response.read()
returndata = returndata.split(":")
mcsessionid = returndata[3]
del req
del returndata
print("Session ID: " + mcsessionid)
data = {'user':u'JackBeePee','host':u'127.0.0.1','port':25566}
stringfmt = u'%(user)s;%(host)s:%(port)d'
string = stringfmt % data
structfmt = '>bh'
packetbytes = struct.pack(structfmt, 2, len(string))+string.encode('utf-16BE')
s.send(packetbytes)
connhash = s.recv(1024)
print("Connection Hash: " + connhash)
print('Sending data to http://session.minecraft.net/game/joinserver.jsp?user=JackBeePee&sessionId=' + mcsessionid + '&serverId=' + connhash + '...')
req = urllib.urlopen('http://session.minecraft.net/game/joinserver.jsp?user=JackBeePee&sessionId=' + mcsessionid + '&serverId=' + connhash)
returndata = req.read()
if(returndata == 'OK'):
print('session.minecraft.net says everything is okay, proceeding to send data to server.')
else:
print('Oops, something went wrong.')
time.sleep(5)
# All above here works perfectly.
enc_user = data['user'].encode('utf-16BE')
#This line is probably where something's going wrong:
packetbytes = struct.pack('>bih', 1, 23, len(data['user'])) + data['user'].encode('utf-16BE') + struct.pack('>hiibBB', 2,0,0,0,0,0)
print(len(packetbytes))
print('Sending ' + packetbytes + ' to server.')
s.send(packetbytes)
while True:
data = s.recv(1024)
if data:
print(data)
總結(jié)
以上是生活随笔為你收集整理的python数据包的作用_使用Python将登录数据包发送到Minecraft服务器不起作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 内存空间_怎样用java实现存
- 下一篇: python int64,如何从Pyth