Пример #1
0
    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")
Пример #2
0
 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"]}"'
         )
Пример #3
0
 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("Произошла ошибка при включении радиус сервера")
Пример #4
0
    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 успешно установлены")
Пример #5
0
    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("Радиус сервер был включен ранее")
Пример #7
0
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