def turnOnSNMP(self, setList): '''Включение SNMPv2. Ничего не возвращает, Результат пишет в консоль и лог''' print(setList) setList = { 'Index': setList["snmIndex"], 'snmpv1v2c': '2', 'snmpv3': setList["snmpv3"], 'udpPort': setList["udpPort"] } print(setList) print() newLis = self.formatList(setList) postData = { "CGI_ID": "SET_LCT09040200_11", "LIST": newLis, "LIST_COUNT": "1", "USER_NAME": self.login, "SESSION_ID": self.sessionID } print(postData) response = self.post(postData) if self.checkStatus(response): logAndPrint("SNMPv2 успешно включен") else: logAndPrint("Ошибка при включении SNMPv2")
def checkConfigRadius(self): '''Запрашивает и печатет в консоль и лог файл параметры Радиус сервера на элементе''' lis = self.getRadiusSet() for i in range(len(lis)): dic = lis[i] logAndPrint( f'Параметры радиус сервера сервера строка {i+1}: IP: {dic["ipAddress"]}, port: {dic["portNo"]}, encription: {"CHAP" if dic["encryptionMethod"] == "2" else "User"}, Secret Key: "{dic["secretKey"]}"' )
def turnOnRadius(self): '''Включает Радиус сервер на сетевом элементе \nНичего не возвращает, результат выводит в консоль и лог''' postData = { 'CGI_ID': 'SET_LCT09RAD001_05', 'LIST': '[{"index":"1","radiusAuthMethod":"3","radiusAuthSequence":"2"}]', 'LIST_COUNT': 1, 'USER_NAME': self.login, 'SESSION_ID': self.sessionID } response = self.post(postData, timeout=20) if self.checkStatus(response): logAndPrint("Радиус сервер успешно включен") else: logAndPrint("Произошла ошибка при включении радиус сервера")
def setSNMPcom(self, index, comName, accLevel, accControl, adress, mask): '''Устанавливает параметры SNMP Community в указанный слот. Если слот занят, удалит параметры, которые были там настроены''' snmp = self.getSNMPset() comm = snmp["snmpCommunity"] for line in comm: if line['comIndex'] == str(index): lis = '[{' + f'"Index":{index},"snmpRowStatus":"6"' + '}]' postData = { 'CGI_ID': 'SET_LCT09040200_20', 'LIST': lis, 'LIST_COUNT': '1', 'USER_NAME': self.login, 'SESSION_ID': self.sessionID } if self.checkStatus(self.post(postData)): logAndPrint(f"Удалено SNMP community{line}") else: logAndPrint( "Произошла ошибка при удалении старого SNMP community") lis = '[{' + f'"Index":"{str(index)}","communityName":"{str(comName)}","accessLevel":"{str(accLevel)}"\ ,"accessControl":"{str(accControl)}","snmpRowStatus":"4","accessAddress":"{str(adress)}","subnetMask":"{str(mask)}"' + '}]' postData = { 'LIST': lis, 'CGI_ID': 'SET_LCT09040200_12', 'LIST_COUNT': '1', 'USER_NAME': self.login, 'SESSION_ID': self.sessionID } if self.checkStatus(self.post(postData)): logAndPrint("Параметры нового SNMP community успешно установлены")
def __init__(self, ip, login, password): '''Авторизация на узле NEC создает сессию из requests и получает session id для последующих запросов ''' self.login = login self.url = f'http://{ip}/cgi/lct.cgi' self.headers = { 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Cookie': 'LCT_POLLTIME=NONE', 'Referer': self.url } logAndPrint(f"Подключаюсь к элементу {ip}", "", 0) # get session id first step authentication self.session = requests.session() postData = { 'CGI_ID': 'GET_LCT01000000_01', 'userName': self.login, 'password': password } auth = self.post(postData, 50) soup = bs(auth.text, "html.parser") self.sessionID = int(soup.find(id="LCTSESSIONID").get('value')) # second step authentication postData = { 'CGI_ID': 'GET_LCT01000000_02', 'USER_NAME': self.login, 'SESSION_ID': self.sessionID } self.post(postData, timeout=50) # third step authentication posts postData = { 'CGI_ID': 'GET_LCT01000000_03', 'userName': self.login, 'SESSION_ID': self.sessionID } self.post(postData, timeout=50) # fourth step authentication posts postData = { 'CGI_ID': 'GET_LCT01000000_04', 'USER_NAME': self.login, 'SESSION_ID': self.sessionID } self.post(postData, timeout=50) # fifth step authentication posts postData = { 'CGI_ID': 'GET_LCT01000000_05', 'userName': self.login, 'SESSION_ID': self.sessionID } response = self.post(postData, timeout=50) if self.checkStatus(response) == False: raise SystemError("Не удалось авторизоваться на сетевом элементе") # sixth step authentication posts postData = { 'CGI_ID': 'GET_LCT99010100_01', 'loginuser': self.login, 'USER_NAME': self.login, 'SESSION_ID': self.sessionID } response = self.post(postData, timeout=50) if self.checkStatus(response) == False: raise SystemError("Не удалось авторизоваться на сетевом элементе") logAndPrint("Авторизация успешно пройдена")
login = input("Введите логин: ") password = getpass("Введите пароль: ") setdic = { "serverIndex": SERVERINDEX, "ipAddress": IPSERVER, "portNo": PORT, "encryptionMethod": ENCRYPTIONMETHOD, "secretKey": SECRETKEY } logAndPrint( f'''###################### radius server param serverIndex = {SERVERINDEX} # line in parameters ipAddress = {IPSERVER} # IP adress radius server portNo = {PORT} # port number encryptionMethod = {ENCRYPTIONMETHOD} # 1 - User, 2 - CHAP secretKey = "{SECRETKEY}" # secret key ######################''', "", 0) listIP = readIPfromXLSX("NEnec.xlsx") for ip in listIP: try: ne = nec(ip, login, password) try: if not ne.checkStatusRadius(): ne.turnOnRadius() else: logAndPrint("Радиус сервер был включен ранее")
ACCADRESS = "0.0.0.0" #адресс доступа, если контроль выключен поставить 0.0.0.0 SUBNETMASK = "0" #маска доступа, если контроль выключен поставить 0 #################################### from getpass import getpass from time import sleep from functions import readIPfromXLSX from functions import logAndPrint from nec import nec login = input("Введите логин: ") password = getpass("Введите пароль: ") listIP = readIPfromXLSX() for i in range(len(listIP)): print(f'Узел {i+1} из {len(listIP)}') try: ne = nec(listIP[i], login, password) snmp = ne.getSNMPset() if snmp["snmp"][0]['snmpv1v2c'] != '2': ne.turnOnSNMP(snmp["snmp"][0]) else: logAndPrint("SNMPv2 уже был включен") ne.setSNMPcom(INDEX, COMNAME, ACCLEVEL, ACCCONTROL, ACCADRESS, SUBNETMASK) except: logAndPrint('Не удалось авторизоваться на элементе') sleep(1) # пауза для прерывания continue