2015-02-03 3 views
0

Im reitryng, чтобы получить некоторых детей из какого-либо сетевого коммутатора, и для этого im, используя библиотеку purepyton под названием pysnmp. его установлены без проблем.pysnmp отправить таймаут при вызове из django view

Использовал образец кода, который работает.

from pysnmp.entity.rfc3413.oneliner import cmdgen 
    cmdGen = cmdgen.CommandGenerator() 
    datos = [] 
    ip = 'theipaddress' 
    comunidad_snmp = 'thecomunityv2c' 

    errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
      cmdgen.CommunityData(comunidad_snmp), 
      cmdgen.UdpTransportTarget((ip, 161)), 
      '.1.3.6.1.2.1.1.1.0', # sysDescr.0 
      lookupNames=True, lookupValues=True 
    ) 

    if errorIndication: 
      print(errorIndication) 
    elif errorStatus: 
      print(errorStatus) 
    else: 
      for name, val in varBinds: 
        datos.append({'nombre': name.prettyPrint(), 'valor': val.prettyPrint()}) 

    print datos 

наша проблема в том, что если я скопировать этот код (как есть) в любом виде результат его всегда

"No SNMP response received before timeout" 

есть что-то нам нужно добавить для этого, чтобы работать, как ожидалось ?.

среда центов 6

ответ

0

Может быть, что ваш SNMP/UDP запросы от Джанго хоста фильтруются в то время как тесты командной строки не?

Копаем глубже: ваш код вызывает pysnmp по умолчанию, на основе asyncore. Если Django (или некоторые его компоненты) каким-то образом использует asyncore в некооперативном режиме, системы pysnmp/django могут каким-то образом вмешиваться ... Способ избежать таких помех будет использовать вашу собственную карту объектов сокета ввода-вывода pysnmp, подобных этому :

... 
from pysnmp.carrier.asynsock.dispatch import AsynsockDispatcher 

cmdGen.snmpEngine.registerTransportDispatcher(AsynsockDispatcher()) 

mySockMap = {} 
cmdGen.snmpEngine.transportDispatcher.setSocketMap(mySockMap) 
... 

Другая идея заключается в том, чтобы включить отладку pysnmp, чтобы увидеть, что там происходит:

import sys 
from pysnmp import debug 
debug.setLogger(debug.Debug('all', printer=sys.stderr.write)) 

есть и другие, менее многословные отладки pysnmp флаги (см pysnmp.debug).

Смежные вопросы