2017-08-08 77 views
1

我測試了SNMP GET命令的以下代碼使用Python pysnmp超時在SNMP GET

g = getCmd(SnmpEngine(), 
      CommunityData('escom'), 
      UdpTransportTarget(('localhost', 161)), 
      ContextData(), 
      ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0))) 

next(g) 

當我與localhost127.0.0.1運行它,它的工作原理,但是當我用電腦的IP,我收到一個超時錯誤。

我還測試了一個我用Java(snmp4j)發現的例子,它是相同的:它與localhost127.0.0.1一起使用,但與IP不同。如果我對IP進行ping,它就可以工作,所以我不明白爲什麼會發生這種情況。

我使用的是Windows 10並在this tutorial之後配置了SNMP代理。

當我使用IP時,有沒有辦法避免超時?

回答

2

首先,您是否確定您的遠程SNMP代理已配置爲響應您?您是否使用與您的遠程代理配置爲使用相同的SNMP團體名稱和SNMP版本?

這也可能是網絡連接問題。在我頭頂,這可能是一個防火牆規則,用於丟棄傳入的SNMP數據包(例如響應)或非對稱路由,這意味着您從一個本地接口發起SNMP數據包,同時響應到另一個接口。

要測試第二個假設,您可以嘗試在demo.snmplabs.com查詢公共SNMP代理。如果它沒有迴應你,那表示你沒有收到響應數據包。

您可以採取的另一個方向是在您的本地機器上設置Wireshark並查看SNMP通信(UDP,端口161)是否會回覆給您。