#!/usr/bin/env python3 """Run commands in the stick's root shell over telnet (idle-tolerant, waits for prompt). Usage: gpon_cmd.py [--idle S] [--cap S] 'cmd1' 'cmd2' ...""" import socket, sys, time, re from gpon_env import HOST, PORT, USER, PASS args=sys.argv[1:]; idle=8.0; cap=120.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(2,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(2,6) send('system'); rx(1.5,5) send('shell'); rx(1.5,5) promptend=lambda b: b.rstrip().endswith(b'shell>') 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