- import socket
- import threading
- import configparser
- from struct import *
- PORT = 25565
- maxpolaczenia = 20
- server = socket.socket()
- server.bind(('', PORT))
- def varint_pack(d):
- o = b''
- while True:
- b = d & 0x7F
- d >>= 7
- o += pack("B", b | (0x80 if d > 0 else 0))
- if d == 0:
- break
- return o
- def varint_unpack(s):
- d, l = 0, 0
- length = len(s)
- if length > 5:
- length = 5
- for i in range(length):
- l += 1
- b = s[i]
- d |= (b & 0x7F) << 7 * i
- if not b & 0x80:
- break
- return (d, s[l:])
- def data_pack(data):
- return varint_pack(len(data)) + data
- def data_unpack(bytes):
- length, bytes = varint_unpack(bytes)
- return bytes[:length], bytes[length:]
- def string_pack(string):
- return data_pack(string.encode())
- def string_unpack(bytes):
- string, rest = data_unpack(bytes)
- return string.decode(), rest
- """
- def struct_unpack(format, struct):
- data = unpack_from(format, struct)
- rest = struct[calcsize(format):]
- return data, rest
- """
- def sendd(se, id, data):
- packid = varint_pack(int(id, 16))
- se.send(data_pack(packid + data))
- def handShake(version, host, port, next):
- if next == 2:
- global mode
- mode = "login"
- version = varint_pack(version)
- host = string_pack(host)
- port = pack('!H', port)
- next = varint_pack(next)
- return version + host + port + next
- def Login(name):
- name = string_pack(name)
- return name
- def _send_data(connection, *args):
- """ Send the data on the connection """
- data = b''
- for arg in args:
- data += data_pack(arg)
- connection.send(varint_pack(len(data)) + data)
- class listener(threading.Thread):
- def __init__(self):
- threading.Thread.__init__(self)
- def run(self):
- while True:
- addr = server.listen(maxpolaczenia)
- local_socket, local_address = server.accept()
- print(str(local_address[0]) + ":" + str(local_address[1]) + " " + "Connected to the proxy!")
- user = client(local_socket).start()
- # local_socket.close()
- # print(str(local_address[0] + ":" + local_address[1]))
- class client(threading.Thread):
- def __init__(self, s):
- threading.Thread.__init__(self)
- self.s = s
- def run(self):
- user = socket.socket()
- try:
- print("Laczenie..")
- user.connect(("localhost", 25567))
- except:
- print("Nie udalo sie polaczyc z serwerem!")
- while 1:
- data = self.s.recv(4096)
- if data == b"":
- pass
- elif data == b"\x06\x00/\x00c\xdd\x02\n\x00\x08Masloids":
- user.sendall(data)
- print(data)
- #p = player(user, self.s)
- else:
- user.sendall(data)
- print(str(data))
- """
- elif data == b"\x06\x00/\x00c\xdd\x02\n\x00\x08Masloids":
- print("Przechwycono handshake!")
- print("Zamieniam...")
- try:
- user.sendall(data)
- while 1:
- lol = user.recv(1024)
- self.s.sendall(lol)
- # print(str(lol))
- # sendd(user, "0x00", Login("Masloids"))
- except:
- print("Nie zamieniono!")
- else:
- print(data)
- user.send(data)
- # self.s.sendall(data)
- """
- class player(threading.Thread):
- def __init__(self, soc, s):
- threading.Thread.__init__(self)
- self.soc = soc
- self.s = s
- def run(self):
- while 1:
- lol = self.soc.recv(1024)
- self.s.sendall(lol)
- listener = listener().start()