import socket import struct import json class Minecraft: def __init__(self, host="", port=25565): self.host = host self.port = port def unpack_varint(self, s): d = 0 for i in range(5): b = ord(s.recv(1)) d |= (b & 0x7F) << 7*i if not b & 0x80: break return d def pack_varint(self, d): o = "" while True: b = d & 0x7F d >>= 7 o += struct.pack("B", b | (0x80 if d > 0 else 0)) if d == 0: break return o def pack_data(self, d): return self.pack_varint(len(d)) + d def pack_port(self, i): return struct.pack('>H', i) def get_info(self): # Connect try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((self.host, self.port)) except: raise ValueError("No Server running") try: # Send handshake + status request s.send(self.pack_data("\x00\x00" + self.pack_data(self.host.encode('utf8')) + self.pack_port(self.port) + "\x01")) s.send(self.pack_data("\x00")) # Read response self.unpack_varint(s) # Packet length self.unpack_varint(s) # Packet ID l = self.unpack_varint(s) # String length d = "" while len(d) < l: d += s.recv(1024) # Close our socket s.close() except: d = "{ 'success': 'false', 'msg': 'Unknown error while connect to Server, is the IP, Port or Type wrong?'}" # Load json and return return json.loads(d)