Advertisement
MrFastDie

Untitled

Oct 15th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.75 KB | None | 0 0
  1. import socket
  2. import struct
  3. import json
  4.  
  5. class Minecraft:
  6.     def __init__(self, host="", port=25565):
  7.         self.host = host
  8.         self.port = port
  9.  
  10.     def unpack_varint(self, s):
  11.         d = 0
  12.         for i in range(5):
  13.             b = ord(s.recv(1))
  14.             d |= (b & 0x7F) << 7*i
  15.             if not b & 0x80:
  16.                 break
  17.         return d
  18.  
  19.     def pack_varint(self, d):
  20.         o = ""
  21.         while True:
  22.             b = d & 0x7F
  23.             d >>= 7
  24.             o += struct.pack("B", b | (0x80 if d > 0 else 0))
  25.             if d == 0:
  26.                 break
  27.         return o
  28.  
  29.     def pack_data(self, d):
  30.         return self.pack_varint(len(d)) + d
  31.  
  32.     def pack_port(self, i):
  33.         return struct.pack('>H', i)
  34.  
  35.     def get_info(self):
  36.  
  37.         # Connect
  38.         try:
  39.             s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  40.             s.connect((self.host, self.port))
  41.         except:
  42.             raise ValueError("No Server running")
  43.  
  44.         try:
  45.             # Send handshake + status request
  46.             s.send(self.pack_data("\x00\x00" + self.pack_data(self.host.encode('utf8')) + self.pack_port(self.port) + "\x01"))
  47.             s.send(self.pack_data("\x00"))
  48.  
  49.             # Read response
  50.  
  51.             self.unpack_varint(s)     # Packet length
  52.             self.unpack_varint(s)     # Packet ID
  53.             l = self.unpack_varint(s) # String length
  54.  
  55.             d = ""
  56.             while len(d) < l:
  57.                 d += s.recv(1024)
  58.  
  59.             # Close our socket
  60.             s.close()
  61.         except:
  62.             d = "{ 'success': 'false', 'msg': 'Unknown error while connect to Server, is the IP, Port or Type wrong?'}"
  63.  
  64.  
  65.         # Load json and return
  66.         return json.loads(d)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement