#!/usr/bin/env python3 """Read-only production dump for captive portal audit.""" import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent)) SCRIPT = r""" :put "===ID===" /system identity print :put "===HS===" /ip hotspot print detail :put "===PROF===" /ip hotspot profile print detail :put "===WG-COUNT===" :put [:len [/ip hotspot walled-garden find]] :put "===WG-GSTATIC===" /ip hotspot walled-garden print where dst-host~"gstatic" or dst-host~"google" or dst-host~"apple" or dst-host~"msft" or dst-host~"otantik" :put "===WG-IP===" /ip hotspot walled-garden ip print :put "===BIND===" /ip hotspot ip-binding print :put "===IPV6-ND===" /ipv6 nd print :put "===DHCP-NET===" /ip dhcp-server network print :put "===LOGIN-HEAD===" /file print detail where name~"hotspot/login.html" or name~"portal/login.html" """ def head_login(sftp, path): try: with sftp.file(path, "r") as f: data = f.read(1800) if isinstance(data, bytes): data = data.decode("utf-8", "replace") print("---", path, "first1800 ---") print(data) except Exception as e: print("---", path, "ERR", type(e).__name__, "---") if sys.argv[1:] == ["nko"]: from mk_rb4011_exec import run, JUMP, MK import paramiko print(run(SCRIPT, timeout=70)) jump = paramiko.SSHClient() jump.set_missing_host_key_policy(paramiko.AutoAddPolicy()) jump.connect(JUMP[0], username=JUMP[1], password=JUMP[2], timeout=25, allow_agent=False, look_for_keys=False) chan = jump.get_transport().open_channel("direct-tcpip", (MK[0], 22), ("127.0.0.1", 0)) mk = paramiko.SSHClient() mk.set_missing_host_key_policy(paramiko.AutoAddPolicy()) mk.connect(MK[0], username=MK[1], password=MK[2], sock=chan, timeout=25, allow_agent=False, look_for_keys=False) sftp = mk.open_sftp() for p in ("hotspot/login.html", "portal/login.html"): head_login(sftp, p) mk.close() jump.close() else: from mk_hub_exec import run, HOST, USER, PASSWORD print(run(SCRIPT, timeout=70)) import paramiko c = paramiko.SSHClient() c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) c.connect(HOST, username=USER, password=PASSWORD, timeout=15, allow_agent=False, look_for_keys=False) sftp = c.open_sftp() for p in ("hotspot/login.html", "portal/login.html"): head_login(sftp, p) c.close()