import socket, time

devices = open("/tmp/devices.txt").read().strip().split("\n")
total = len(devices)
ok = []
fail = 0

for i, line in enumerate(devices):
    parts = line.split(":")
    if len(parts) < 4: continue
    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(5)
        s.connect((ip, port))
        time.sleep(0.5)
        data = s.recv(4096).decode(errors="ignore")
        if "login" in data.lower():
            s.send((user+"\r\n").encode())
            time.sleep(0.5)
            data = s.recv(4096).decode(errors="ignore")
        if "password" in data.lower():
            s.send((passwd+"\r\n").encode())
            time.sleep(1)
            data = s.recv(4096).decode(errors="ignore")
        try: s.recv(65536)
        except: pass
        # Test exec
        s.send(b"echo VANTAOK\r\n")
        time.sleep(1)
        r = s.recv(4096).decode(errors="ignore")
        s.close()
        if "VANTAOK" in r:
            ok.append(line)
        else:
            fail += 1
    except:
        fail += 1
    if (i+1) % 100 == 0:
        open("/tmp/_scan_progress.txt","w").write(str(i+1) + "/" + str(total) + " ok=" + str(len(ok)) + "\n")

with open("/tmp/_alive_devices.txt","w") as f:
    f.write("\n".join(ok) + "\n")
with open("/tmp/_scan_result.txt","w") as f:
    f.write("TOTAL=" + str(total) + " OK=" + str(len(ok)) + " FAIL=" + str(fail) + "\n")
