# R-1250 live test only (2026-10-27): forward guest 9201's LAN :6881 (TCP and UDP) to its throwaway qBittorrent # container, so DooPlex's qBittorrent can reach the seed. Started by hand, killed at teardown. import socket, sys, threading LAN, DST = sys.argv[1], (sys.argv[2], 6881) def pipe(a, b): try: while True: d = a.recv(65536) if not d: break b.sendall(d) except OSError: pass finally: for s in (a, b): try: s.shutdown(socket.SHUT_RDWR) except OSError: pass def udp(): us = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); us.bind((LAN, 6881)); peers = {} def back(client, s): while True: try: d, _ = s.recvfrom(65536) except OSError: return us.sendto(d, client) while True: d, client = us.recvfrom(65536) s = peers.get(client) if s is None: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.connect(DST); peers[client] = s threading.Thread(target=back, args=(client, s), daemon=True).start() s.send(d) threading.Thread(target=udp, daemon=True).start() ls = socket.socket(); ls.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1); ls.bind((LAN, 6881)); ls.listen(16) while True: c, _ = ls.accept() u = socket.create_connection(DST) threading.Thread(target=pipe, args=(c, u), daemon=True).start() threading.Thread(target=pipe, args=(u, c), daemon=True).start()