日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

我在Python中有以下腳本 . 它的作用是嘗試連接到MineCraft服務器,首先發送'handshake',然后發送登錄請求 . 協議規格可以在這里找到:http://wiki.vg/Protocol

無論如何,python腳本工作正常,沒有錯誤 . 但是,我相當使用我編碼第二個數據包錯誤,因為它發送時,服務器控制臺上沒有任何內容 . 播放器沒有連接或任何東西 . 由于“客戶端”沒有及時登錄,它最終會超時并關閉連接 .

基本上,無論如何誰有struct.pack()的經驗應該能夠在這里幫助我 . 我已經評論了我不確定我是否已將所有內容編碼正確的行 . 有關打包數據的詳細信息,請參見上面的鏈接 .

任何幫助將不勝感激,我對編碼/打包數據非常無能為力 . :(

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)

總結

以上是生活随笔為你收集整理的python数据包的作用_使用Python将登录数据包发送到Minecraft服务器不起作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。