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

2024-04-24 16:54:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一些python来使用、Twisted和pysnmp进行SNMP扫描。代码工作(耶!)当扫描已路由但在扫描“我的设备”框所在的子网时经常抛出错误的网络时。你知道吗

我已经通过多次测试证实,当扫描大到a/21(2048个地址)的路由网络时,不会发生错误。但是当扫描我的本地子网时,我得到了一个错误。本地子网是a/23(512个地址),但错误是不一致的,因为如果我将扫描限制为本地网络的一个子集,我有时可以成功地将其扫描为a/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])

我得到的最后一个错误是下面我可以提供整个trackback如果它会有帮助。我意识到的是,虽然我需要能够捕捉这些错误并处理它们,但为了确保不会使网络或特定设备的SNMP堆栈过载,我确实需要能够限制未完成调用的数量。我需要能够动态地做到这一点,所以我不希望像“睡眠这么多微秒”这样直截了当的事情,我更希望能够计算未完成的请求,然后根据这些请求进行限制。你知道吗

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


Tags: 代码fromimport网络路由错误twistednetwork