change to python3 instead of explicit 3.6
This commit is contained in:
66
net/devices/actiontec/ActionTec/Connector.py
Executable file
66
net/devices/actiontec/ActionTec/Connector.py
Executable file
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env python3.6
|
||||
|
||||
# stdlib
|
||||
import re
|
||||
import socket
|
||||
|
||||
def CheckConnection(host, port):
|
||||
# We favor socket over telnetlib's check because it has a little better
|
||||
# handling of exceptions.
|
||||
try:
|
||||
port = int(port) # just in case we were passed a str()
|
||||
except ValueError:
|
||||
raise ValueError('"{0}" is not a port number'.format(port))
|
||||
# In case they're catching the exception...
|
||||
return(False)
|
||||
s = socket.socket()
|
||||
try:
|
||||
s.connect((host, port))
|
||||
except Exception as e:
|
||||
raise RuntimeError(('We were unable to successfully connect to ' +
|
||||
'"{0}:{1}": {2}').format(host, port, e))
|
||||
return(False)
|
||||
finally:
|
||||
s.close()
|
||||
return(True)
|
||||
|
||||
def Login(host, port, ssl, user, password):
|
||||
user_prompt = [re.compile('^\s*user(name)?\s*:?\s*'.encode('utf-8'),
|
||||
re.IGNORECASE)]
|
||||
passwd_prompt = [re.compile('^\s*passw(or)d?\s*:?\s*'.encode('utf-8'),
|
||||
re.IGNORECASE)]
|
||||
# Are there any other valid chars? Will need to experiment.
|
||||
# How is this even set? The default is "Wireless Broadband Router".
|
||||
# I think it can't be changed, at least via the Web GUI.
|
||||
cmd_prompt = [re.compile('[-_a-z0-9\s]*>'.encode('utf-8'),
|
||||
re.IGNORECASE)]
|
||||
ctx = None
|
||||
ctxargs = {'host': host, 'port': port}
|
||||
try:
|
||||
if ssl:
|
||||
try:
|
||||
from ssltelnet import SslTelnet as telnet
|
||||
ctxargs['force_ssl'] = True
|
||||
except ImportError:
|
||||
raise ImportError(('You have enabled SSL but do not have ' +
|
||||
'the ssltelnet module installed. See ' +
|
||||
'the README file, footnote [1].'))
|
||||
else:
|
||||
from telnetlib import Telnet as telnet
|
||||
ctx = telnet(**ctxargs)
|
||||
ctx.expect(user_prompt, timeout = 8)
|
||||
ctx.write((user + '\n').encode('utf-8'))
|
||||
ctx.expect(passwd_prompt, timeout = 8)
|
||||
ctx.write((password + '\n').encode('utf-8'))
|
||||
ctx.expect(cmd_prompt, timeout = 15)
|
||||
except EOFError:
|
||||
if ctx:
|
||||
ctx.close()
|
||||
ctx = None
|
||||
except Exception as e:
|
||||
raise RuntimeError(('We encountered an error when trying to connect:' +
|
||||
' {0}').format(e))
|
||||
if ctx:
|
||||
ctx.close()
|
||||
ctx = None
|
||||
return(ctx)
|
||||
Reference in New Issue
Block a user