Как установить DateAndTime для объекта MIB HrSystemDate, используя PySNMP - PullRequest
0 голосов
/ 04 апреля 2019

Я не могу установить dateAndTime в стандартной Mib HrSystemDate при использовании pysnmp setCmd.У меня нет проблем с настройкой других MIB с помощью строки октетов, единственная проблема заключается в настройке даты / времени, которая также является форматом строки октетов.Я не уверен, что мне не хватает.Посоветуйте, пожалуйста, как установить дату / время с помощью pysnmp setCmd.


Я могу установить дату и время, используя snmpset в команде windows, используя этот формат значения '2019-04-04,09: 18:32.0, + 13: 0 ',

например, snmpset -v3 -l authPriv -u snmpAdmin -a SHA -A "пароль" -x AES -X "пароль" -n терминал 192.168.0.5 .1.3.6.1.2.1.25.1.2.0 = 2019-04-04,09: 18: 32.0, + 13: 0

В рассуждениях я также могу установить формат, дату и время и строку октетов. Не могу опубликовать изображениено вот так вот ссылка. ireasoning


Фрагмент

code


def setSnmpV3string(ip, context='terminal', oid='.1.3.6.1.4.1.2509.8.29.2.15.1.2.1',value=''):
    errorIndication, errorStatus, errorIndex, varBinds = next(
        setCmd(SnmpEngine(),            
        UsmUserData('snmpAdmin', 'password', 'password',
                    authProtocol=usmHMACSHAAuthProtocol,
                    privProtocol=usmAesCfb128Protocol),
        UdpTransportTarget((ip, 161),),
        ContextData(contextName=context),
        ObjectType(ObjectIdentity(oid), OctetString(value) ))    
    )    
    values = '  =  '
    if errorIndication:
        print(errorIndication)
    elif errorStatus:
        print('%s at %s' % (errorStatus.prettyPrint(),
                        errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
    else:
        for varBind in varBinds:
            values = ' = '.join([x.prettyPrint() for x in varBind])
            print(values)
    return values.split(' = ')[1]

Консольный вывод

OctetString(value) 
<OctetString value object at 0x615ba90 tagSet <TagSet object at 0x502ca70 tags 0:0:4> subtypeSpec <ConstraintsIntersection object at 0x4fef090 consts <ValueSizeConstraint object at 0x4fe0b70 consts 0, 65535>> encoding iso-8859-1 payload [2019-04-04,10:27:41.0,+12:0]>

errorStatus
<Integer value object at 0x6106970 tagSet <TagSet object at 0x4ff59b0 tags 0:0:2> namedValues <NamedValues object 0x54d36b0 enums noError=0, tooBig=1, noSuchName=...Writable=17, inconsistentName=18> payload [commitFailed]>

Я предполагаю, что pySnmp потребуется тот же тип ввода, что и iReasoning, но я не знаю, как это сделать.Спасибо!

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Для простого решения только для строки октета даты / времени я сделал следующее: Я должен использовать пакет strut для преобразования строки даты и времени в байты. что-то вроде этого, struct.pack ('> HBBBBBBcBB', 'yyyy', 'mm', 'dd', 'H', 'M', 'S', 0, b '+', time_offset, 0), который будет быть b '\ x07 \ xe3 \ x04 \ x04 \ x0b \ x02! \ x07 + \ r \ x00' и может быть отправлено в вышеуказанную функцию snmpV3string

0 голосов
/ 04 апреля 2019

Вы должны получить pysnmp с отметкой времени в удобной для человека форме и превратить ее в серию октетов.Информация о формате содержится в SNMPv2-TC :: DateAndTime TEXTUAL-CONVENTION:

DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"

Для использования pysnmp вы можете передать имя объекта MIB (HOST-RESOURCES-MIB::hrSystemDate) вместоOID при подготовке команды SNMP:

...
ObjectType(ObjectIdentity('HOST-RESOURCES-MIB', 'hrSystemDate'), value)

Для SNMP GET работает аналогично, но в обратном порядке.

...