Skip to content

Embed URL


Subversion checkout URL

You can clone with
Download ZIP
import socket
import struct
import json
def unpack_varint(s):
d = 0
for i in range(5):
b = ord(s.recv(1))
d |= (b & 0x7F) << 7*i
if not b & 0x80:
return d
def pack_varint(d):
o = ""
while True:
b = d & 0x7F
d >>= 7
o += struct.pack("B", b | (0x80 if d > 0 else 0))
if d == 0:
return o
def pack_data(d):
return pack_varint(len(d)) + d
def pack_port(i):
return struct.pack('>H', i)
def get_info(host='localhost', port=25565):
# Connect
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
# Send handshake + status request
s.send(pack_data("\x00\x00" + pack_data(host.encode('utf8')) + pack_port(port) + "\x01"))
# Read response
unpack_varint(s) # Packet length
unpack_varint(s) # Packet ID
l = unpack_varint(s) # String length
d = ""
while len(d) < l:
d += s.recv(1024)
# Close our socket
# Load json and return
return json.loads(d.decode('utf8'))

Thanks for this! I wrote a simple OO wrapper using it as a base.


Thanks for this! I used the *_varint functions to create a simple chat client.


Used this in in a load balancer for Minecraft.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.