import socket

# Updated connection details
HOST = "netsec.net.in.tum.de"
PORT = 20103


def get_flag():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    s.connect((HOST, PORT))
    sf = s.makefile("rw")  # we use a file abstraction for the sockets

    full_message = []
    collecting = False
    while True:
        try:
            message = sf.readline()
            if not message:
                break

            message = message.rstrip("\n")
            print(f"Server says: {message}")

            if "team number" in message.lower():
                sf.write("153\n")
                sf.flush()
            elif "In this challenge" in message:
                collecting = True
                full_message = [message]
            elif collecting:
                full_message.append(message)
                if "solution" in message.lower():
                    answer = '[("192.168.0.126", "8.8.8.8", "udp", 53836, 53), ("192.168.0.126", "31.192.117.132", "tcp", 41160, 80), ("73.73.73.73", "192.168.0.20", "tcp", 38451, 23), ("192.168.0.126", "54.54.54.54", "tcp", 57020, 25)]'
                    sf.write(answer + "\n")
                    sf.flush()
                    collecting = False
                    full_message = []

        except socket.timeout:
            continue
        except (EOFError, ConnectionError) as e:
            print(f"Connection error: {e}")
            break

    sf.close()
    s.close()


if __name__ == "__main__":
    get_flag()
