日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

python数据包的作用_使用Python将登录数据包发送到Minecraft服务器不起作用

發(fā)布時(shí)間:2024/10/14 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数据包的作用_使用Python将登录数据包发送到Minecraft服务器不起作用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我在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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。