2015-10-25 53 views
0

在这篇文章http://pysnmp.sourceforge.net/examples/current/v1arch/manager/cmdgen/getnext-v1.html我能够一次改变一个设备上的pdu,但我努力向同一设备发送更多的请求。
我试着做以下几点:Pysnmp:如何随时更改PDU并同时向多个设备发送SNMP请求?

transportDispatcher.registerTransport(
    udp.domainName, udp.UdpSocketTransport().openClientMode() 
) 
transportDispatcher.sendMessage(
    encoder.encode(reqMsg), udp.domainName, ('demo.snmplabs.com', 161) 
) 
transportDispatcher.jobStarted(1) 
transportDispatcher.registerTransport(
    udp.domainName, udp.UdpSocketTransport().openClientMode() 
) 
transportDispatcher.sendMessage(
    encoder.encode(reqMsg), udp.domainName, ('192.168.0.49', 161) 
) 
transportDispatcher.jobStarted(1) 

,但我得到了以下错误: “pysnmp.carrier.error.CarrierError:交通运输(1,3,6,1,6,1,1)已注册” 。 那么我该如何更改PDU并同时向多个设备发送SNMP请求?

回答

0

严格地说,您不会即时改变PDU,而是在构建不同的SNMP消息并通过相同的网络传输单独发送它们。

您的代码的问题在于您尝试在同一个SNMP传输标识下注册多个UDP套接字。您不需要这样,因为您可以通过一个套接字将UDP数据报发送到多个目标。

因此,运输注册只应在你的代码执行一次:

# one-time initialization 
transportDispatcher.registerTransport(
    udp.domainName, udp.UdpSocketTransport().openClientMode() 
) 

# messaging 
while True: 
    transportDispatcher.sendMessage(
     encoder.encode(reqMsg), udp.domainName, ('demo.snmplabs.com', 161) 
    ) 
    transportDispatcher.jobStarted(1) 
    ... 

边注:DNS解析是不同步的,以确保它工作速度不够快或解决您的代理使用的IP地址。

如果你想出于某种原因多个UDP套接字,使用它们不同的SNMP运输ID的两个注册和使用:

transportDispatcher.registerTransport(
    udp.domainName + (1,), udp.UdpSocketTransport().openClientMode() 
) 
transportDispatcher.registerTransport(
    udp.domainName + (2,), udp.UdpSocketTransport().openClientMode() 
) 
+0

那么,什么是快?随时更改pdu或“构建不同的SNMP消息并通过相同的网络传输单独发送”?两者有什么区别?你能告诉我怎样才能在pysnmp上动态更换PDU,因为我浏览了http://pysnmp.sourceforge.net/examples/contents.html#packet-level-snmp并没有找到任何东西。我也想安排一个Skype聊天与你的一些价格,所以你可以回答我的一些问题。如果你对gmail感兴趣的回复。 – yuval