#!/usr/bin/env python3 """Drive the stick's #ONT OMCI CLI (NOT the busybox shell). Stays at #ONT> and navigates menus. Usage: gpon_cli.py [--idle S] [--cap S] 'cmd1' 'cmd2' ... Sends each cmd as a CLI line (e.g. 'system', 'misc', '?', 'eqsn get').""" import socket, sys, time, re from gpon_env import HOST, PORT, USER, PASS args=sys.argv[1:]; idle=8.0; cap=60.0; cmds=[] while args: a=args.pop(0) if a=='--idle': idle=float(args.pop(0)) elif a=='--cap': cap=float(args.pop(0)) else: cmds.append(a) def strip_iac(data,outbuf): res=bytearray(); i=0 while iidle: break if time.time()-start>cap: break return buf.decode('latin-1','replace') def send(x): s.sendall(x.encode()+b'\r\n') o=rx(3,8) if re.search(r'(ogin|sername)',o): send(USER); o+=rx(2,6) if re.search(r'assword',o,re.I): send(PASS); o+=rx(3,8) # now sitting at #ONT> (do NOT enter shell) promptend=lambda b: b.rstrip().endswith(b'>') for c in cmds: send(c) out=rx(idle,cap,stop=promptend) print("\n>>> %s\n%s"%(c,out)) try: s.close() except Exception: pass