#!/usr/bin/env python3 """Minimal BEP-5 get_peers responder for the trackerless magnet gate.""" import socket import struct import sys peer_port = int(sys.argv[1]) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(("127.0.0.1", 0)) print("DHT_PORT %d" % sock.getsockname()[1], flush=True) node_id = bytes(range(20)) compact_peer = socket.inet_aton("127.0.0.1") + struct.pack("!H", peer_port) while True: packet, address = sock.recvfrom(65535) marker = b"1:t" start = packet.find(marker) if start < 0: continue length_start = start + len(marker) colon = packet.find(b":", length_start) if colon < 0: continue try: tx_len = int(packet[length_start:colon]) except ValueError: continue tx = packet[colon + 1:colon + 1 + tx_len] if len(tx) != tx_len: continue response = ( b"d1:rd2:id20:" + node_id + b"6:valuesl6:" + compact_peer + b"ee1:t" + str(tx_len).encode() + b":" + tx + b"1:y1:re" ) sock.sendto(response, address)