#!/usr/bin/env python3 """Paramiko to hAP lite with legacy crypto, then run bootstrap.""" from __future__ import annotations import socket import time import paramiko HOST = "192.168.88.1" USER = "admin" PASSWORDS = ["", "1234", "admin", "demopass"] def connect(): last = None for pw in PASSWORDS: try: sock = socket.create_connection((HOST, 22), 10) t = paramiko.Transport(sock) opts = t.get_security_options() opts.key_types = ("ssh-rsa", "ssh-dss") opts.kex = ( "diffie-hellman-group14-sha1", "diffie-hellman-group1-sha1", "diffie-hellman-group-exchange-sha1", "diffie-hellman-group14-sha256", ) opts.ciphers = ("aes128-cbc", "aes256-cbc", "3des-cbc", "aes128-ctr", "aes256-ctr") opts.digests = ("hmac-sha1", "hmac-md5", "hmac-sha2-256") t.start_client(timeout=15) t.auth_password(USER, pw) print("LOGIN OK pass", repr(pw)) return t except Exception as e: last = e print("fail", repr(pw), type(e).__name__, e) try: t.close() except Exception: pass raise SystemExit(f"login failed: {last}") def wait_prompt(chan, timeout=20) -> str: buf = b"" end = time.time() + timeout while time.time() < end: time.sleep(0.12) if chan.recv_ready(): buf += chan.recv(65535) end = time.time() + 1.8 if b"> " in buf[-200:]: break return buf.decode("utf-8", "replace") def cmd(chan, line: str, timeout=35) -> str: chan.send(line + "\r") out = wait_prompt(chan, timeout) print("\n===== " + line[:100] + " =====") print(out[-4500:]) return out def main() -> None: t = connect() chan = t.open_session() chan.get_pty(width=200, height=50) chan.invoke_shell() wait_prompt(chan, 15) cmd(chan, "/system identity print") cmd(chan, "/system resource print") boot6 = ( '/tool fetch address=83.147.38.107 src-path="/provision/test-enjoy.ros6.rsc" mode=http dst-path=wo.rsc; ' ':delay 2s; :do { /system scheduler remove [find name="wo-setup"] } on-error={}; ' '/system scheduler add name=wo-setup interval=5s policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon ' 'on-event=":do { /import file-name=wo.rsc } on-error={}; /system scheduler remove [find name=wo-setup]"' ) print("\n*** BOOT6 ***") cmd(chan, boot6, timeout=70) time.sleep(10) cmd(chan, "/file print") cmd(chan, "/system scheduler print") cmd(chan, "/log print") t.close() if __name__ == "__main__": main()