Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement