Facebook
From xddd, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 164
  1. import socket
  2. import threading
  3. import configparser
  4. from struct import *
  5.  
  6. PORT = 25565
  7. maxpolaczenia = 20
  8. server = socket.socket()
  9. server.bind(('', PORT))
  10.  
  11.  
  12. def varint_pack(d):
  13.     o = b''
  14.     while True:
  15.         b = d & 0x7F
  16.         d >>= 7
  17.         o += pack("B", b | (0x80 if d > 0 else 0))
  18.         if d == 0:
  19.             break
  20.     return o
  21.  
  22.  
  23. def varint_unpack(s):
  24.     d, l = 0, 0
  25.     length = len(s)
  26.     if length > 5:
  27.         length = 5
  28.     for i in range(length):
  29.         l += 1
  30.         b = s[i]
  31.         d |= (b & 0x7F) << 7 * i
  32.         if not b & 0x80:
  33.             break
  34.     return (d, s[l:])
  35.  
  36.  
  37. def data_pack(data):
  38.     return varint_pack(len(data)) + data
  39.  
  40.  
  41. def data_unpack(bytes):
  42.     length, bytes = varint_unpack(bytes)
  43.     return bytes[:length], bytes[length:]
  44.  
  45.  
  46. def string_pack(string):
  47.     return data_pack(string.encode())
  48.  
  49.  
  50. def string_unpack(bytes):
  51.     string, rest = data_unpack(bytes)
  52.     return string.decode(), rest
  53.  
  54. """
  55. def struct_unpack(format, struct):
  56.     data = unpack_from(format, struct)
  57.     rest = struct[calcsize(format):]
  58.     return data, rest
  59. """
  60.  
  61. def sendd(se, id, data):
  62.     packid = varint_pack(int(id, 16))
  63.     se.send(data_pack(packid + data))
  64.  
  65.  
  66. def handShake(version, host, port, next):
  67.     if next == 2:
  68.         global mode
  69.         mode = "login"
  70.  
  71.     version = varint_pack(version)
  72.     host = string_pack(host)
  73.     port = pack('!H', port)
  74.     next = varint_pack(next)
  75.     return version + host + port + next
  76.  
  77.  
  78. def Login(name):
  79.     name = string_pack(name)
  80.     return name
  81.  
  82. def _send_data(connection, *args):
  83.     """ Send the data on the connection """
  84.     data = b''
  85.  
  86.     for arg in args:
  87.         data += data_pack(arg)
  88.  
  89.     connection.send(varint_pack(len(data)) + data)
  90.  
  91.  
  92. class listener(threading.Thread):
  93.     def __init__(self):
  94.         threading.Thread.__init__(self)
  95.  
  96.     def run(self):
  97.         while True:
  98.             addr = server.listen(maxpolaczenia)
  99.             local_socket, local_address = server.accept()
  100.             print(str(local_address[0]) + ":" + str(local_address[1]) + " " + "Connected to the proxy!")
  101.             user = client(local_socket).start()
  102.             while 1:
  103.                 bs = local_socket.recv(4096)
  104.                 if bs != b"":
  105.                     print(str(bs))
  106.  
  107.  
  108.  
  109.  
  110. #            local_socket.close()
  111.  
  112. #     print(str(local_address[0] + ":" + local_address[1]))
  113.  
  114. class client(threading.Thread):
  115.     def __init__(self, s):
  116.         threading.Thread.__init__(self)
  117.         self.s = s
  118.  
  119.     def run(self):
  120.         user = socket.socket()
  121.         try:
  122.             print("Laczenie..")
  123.             user.connect(("94.23.91.251", 25565))
  124.         except:
  125.             print("Nie udalo sie polaczyc z serwerem!")
  126.         data = self.s.recv(4096)
  127.         if data == b"":
  128.             print("Disconnected")
  129.             return 0
  130.         elif data == b"\x06\x00/\x00c\xdd\x02\n\x00\x08Masloids":
  131.             print("Przechwycono handshake!")
  132.             print("Zamieniam...")
  133.             try:
  134.                 user.sendall(data)
  135.                 #sendd(user, "0x00", Login("Masloids"))
  136.                 while 1:
  137.                     lol = user.recv(1024)
  138.                     if lol == b"":
  139.                         print("Disconnected")
  140.                     self.s.sendall(lol)
  141.                     #print(str(lol))
  142.                 #sendd(user, "0x00", Login("Masloids"))
  143.             except:
  144.                 print("Nie zamieniono!")
  145.  
  146.  
  147.         else:
  148.             print(data)
  149.             user.send(data)
  150.             self.s.sendall(data)
  151.  
  152.  
  153.  
  154. listener = listener().start()