Spaces:
Paused
Paused
| _A=True | |
| import subprocess,os,socket,threading | |
| from loguru import logger | |
| from.utils import decode_cmd | |
| from.import mc_tunnel | |
| XOR_BRIDGE_PORT=25565 | |
| SSH_PORT=2222 | |
| def deobfuscate_secret(hex_str,key=90): | |
| A=hex_str | |
| if not A:return'' | |
| try: | |
| C=bytes.fromhex(A.strip());B=bytes([A^key for A in C]) | |
| if all(32<=A<=126 or A in(9,10,13)for A in B):return B.decode('utf-8',errors='ignore') | |
| else:return A | |
| except Exception:return A | |
| def _load_token(): | |
| B='PLAYIT';C=os.environ.get('P')or os.environ.get(B)or'';D=deobfuscate_secret(C.strip()) | |
| for A in('P',B): | |
| if A in os.environ:del os.environ[A] | |
| return D | |
| def _handle_client(client_sock): | |
| A=client_sock;import traceback as E,sys | |
| try:F,D=mc_tunnel.server_consume_login(A);B=socket.socket(socket.AF_INET,socket.SOCK_STREAM);B.settimeout(5.);B.connect(('127.0.0.1',D));B.settimeout(None);logger.info('Playit MC tunnel: login complete, relaying to port {}',D);mc_tunnel.relay_server(F,B,A) | |
| except(ConnectionError,socket.timeout,TimeoutError,OSError,ValueError)as C: | |
| logger.info('Playit MC tunnel client disconnected/invalid handshake: {}',C) | |
| try:A.close() | |
| except Exception:pass | |
| except Exception as C: | |
| logger.warning('Playit MC tunnel client dropped unexpectedly: {} - {}',type(C).__name__,C);E.print_exc(file=sys.stderr) | |
| try:A.close() | |
| except Exception:pass | |
| def _xor_bridge_loop(): | |
| A=socket.socket(socket.AF_INET,socket.SOCK_STREAM);A.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) | |
| try: | |
| A.bind(('0.0.0.0',XOR_BRIDGE_PORT));A.listen(10) | |
| while _A:B,C=A.accept();threading.Thread(target=_handle_client,args=(B,),daemon=_A).start() | |
| except Exception:pass | |
| def start_xor_bridge():threading.Thread(target=_xor_bridge_loop,daemon=_A).start();logger.info('Playit MC tunnel bridge on 0.0.0.0:{} (plugin channel {})',XOR_BRIDGE_PORT,mc_tunnel.TUNNEL_CHANNEL) | |
| def start(tm_log):A=_load_token();B=decode_cmd('nACdlJ3YlNXLtAyaj92cuQXa5FGbw9CctR3LggGdhBXL0V2aj92ct0CIy9GdhN2bsxWYtI3bz5WZ0BSOxAibtASZjlmb');C=f"{B}{A}'";A='';D=os.environ.copy();subprocess.Popen(C,shell=_A,env=D,stdout=tm_log,stderr=subprocess.STDOUT) |