如何控制产生扭曲事件的速率

时间:2019-04-18 16:46:53

标签: python twisted throttling

我正在编写一些Python使用Twisted和pysnmp进行SNMP扫描。该代码在扫描路由的网络时有效(是!),但是在扫描我的开发人员所在的子网时会不断地引发错误。

我已经通过多次测试确认,当扫描大小为/ 21(2048个地址)的路由网络时,不会发生任何错误。但是当扫描我的本地子网时,我得到了错误。本地子网是/ 23(512个地址),但是错误并不一致,因为如果我将扫描范围限制为本地网络的子集,我有时可以成功地将其扫描为/ 24(256)或/ 25(128),但并非总是如此。这些大小有时也会产生错误。

以下是相关代码:

from twisted.internet.defer import DeferredList
from twisted.internet.task import react
from pysnmp.hlapi.twisted import *
import ipaddress



def getsystem(reactor, snmpengine, hostname, varBinds):

        d = getCmd(snmpengine,
                   CommunityData('communityname', mpModel=0),
                   UdpTransportTarget((hostname, 161)),
                   ContextData(),
                   varBinds)
        d.addCallback(success, hostname).addErrback(failure, hostname)
        return d


def getall(reactor, hostnames):
    snmpengine = SnmpEngine()
    test = reactor.getThreadPool
    print(counter)
    return DeferredList(
        [
        getsystem(reactor, snmpengine, hostname, ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)))
        for hostname in hostnames
        ]
    )


network = ipaddress.ip_network('10.10.16.0/21', strict=False)

hosts = []
for addr in network.hosts():
    hosts.append(str(addr))


react(getall, [hosts])

我得到的最终错误是,如果有帮助,我可以提供整个引用。我意识到的是,尽管我需要能够捕捉到这些错误并进行处理,以确保我不会使网络或特定设备的SNMP堆栈过载,但我确实需要能够限制未接来电的数量。我将需要能够动态地做到这一点,所以我不希望任何事情变得如此“钝”,因为我宁愿能够计算未完成的请求,然后基于此限制。 >

“ pysnmp.carrier.error.CarrierError:扭曲的异常:[Errno 11]资源暂时不可用,原因:[Errno 11]资源暂时不可用”

0 个答案:

没有答案