MrFastDie icon

Untitled

MrFastDie | PRO | 10/15/17 04:18:08 PM UTC | 0 ⭐ | 277 👁️ | Never ⏰ | []
Python |

1.75 KB

|

None

|

0 👍

/

0 👎

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)

Comments