Работал с netsnmp, он с этим справлялся минут за 2-4, но после обновления до debian wheezy он начал глючить, бросать сегфолты и неправильно отрабатывать walk с несколькими аргументами. Пакет libsnmp-python.
Пробовал pysnmp, с потоками он работать не может, а асинхронность я его так и не понял:
def cmp_varBinds(varBind, varName): if varName in str(varBind[0]): return True def cbFun(sendRequestHandle, errorIndication, errorStatus, errorIndex, varBinds, varNames): if not varBinds or not any(map(cmp_varBinds, varBinds[0], varNames)): return False else: print [str(x[1]) for x in varBinds[0]] return True for host in hosts: num += 1 id, ip, community, hc = host oids = [] if hc: #ifHCInOctets oids.append('1.3.6.1.2.1.31.1.1.1.6') #ifHCOutOctets oids.append('1.3.6.1.2.1.31.1.1.1.10') else: #ifInOctets oids.append('1.3.6.1.2.1.2.2.1.10') #ifOutOctets oids.append('1.3.6.1.2.1.2.2.1.16') #ifInUcastPkts oids.append('1.3.6.1.2.1.2.2.1.11') #ifInNUcastPkts oids.append('1.3.6.1.2.1.2.2.1.12') #ifInDiscards oids.append('1.3.6.1.2.1.2.2.1.13') #ifInErrors oids.append('1.3.6.1.2.1.2.2.1.14') cmdGen.bulkCmd( cmdgen.CommunityData(community), cmdgen.UdpTransportTarget((ip, 161)), 6, 6, oids, (cbFun, oids)) try: cmdGen.snmpEngine.transportDispatcher.runDispatcher() except KeyboardInterrupt: logging.info("KeyboardInterrupt! Fetch snmp speed finished") exit(0)
Есть еще yapsnmp, не получается его собрать.