我正在编写一些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]资源暂时不可用“
目前没有回答
相关问题 更多 >
编程相关推荐