使用 pysnmp 获取输出
getting output using pysnmp
如果这是一件如此简单的事情,请原谅我,但我是 Python、pysnmp 和 SNMP 的新手。
我正在尝试 运行 一些非常简单的查询,使用 SNMP 从设备获取配置信息,并且出于某种原因遵循文档 here。
即使我可以通过 snmpwalk 遍历 SNMP,我也没有得到任何输出,谷歌搜索似乎只显示了我下面的示例。
我的密码是
#!/usr/bin/python3.5
from pysnmp.hlapi import *
varCommunity = "public"
varServer = "demo.snmplabs.com"
varPort = 161
g = getCmd(SnmpEngine(),
CommunityData(varCommunity),
UdpTransportTarget((varServer, varPort)),
ContextData(),
ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)))
next(g)
如果我加上
print(g)
我会得到以下输出
<generator object getCmd at 0x7f25964847d8>
next(g)
将 return 来自生成器的下一个值。如果您在 Python 控制台中键入此代码,您会看到实际结果。但是,由于您是 运行 来自文件的结果,结果将被丢弃。
您需要在其周围加上 print
。例如
print(next(g))
为了更容易调试,您可以像这样获得所有结果的列表:
print(list(g))
这是您的原始脚本,其中有一些更改和注释,希望可以帮助您加快使用 pysnmp 的速度:
from pysnmp.hlapi import *
varCommunity = "public"
varServer = "demo.snmplabs.com"
varPort = 161
g = getCmd(SnmpEngine(),
CommunityData(varCommunity),
UdpTransportTarget((varServer, varPort)),
ContextData(),
ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)))
# this is what you get from SNMP agent
error_indication, error_status, error_index, var_binds = next(g)
if not error_indication and not error_status:
# each element in this list matches a sequence of `ObjectType`
# in your request.
# In the code above you requested just a single `ObjectType`,
# thus we are taking just the first element from response
oid, value = var_binds[0]
print(oid, '=', value)
您可能会发现 pysnmp documentation 也很有见地。 ;-)
如果这是一件如此简单的事情,请原谅我,但我是 Python、pysnmp 和 SNMP 的新手。
我正在尝试 运行 一些非常简单的查询,使用 SNMP 从设备获取配置信息,并且出于某种原因遵循文档 here。
即使我可以通过 snmpwalk 遍历 SNMP,我也没有得到任何输出,谷歌搜索似乎只显示了我下面的示例。
我的密码是
#!/usr/bin/python3.5
from pysnmp.hlapi import *
varCommunity = "public"
varServer = "demo.snmplabs.com"
varPort = 161
g = getCmd(SnmpEngine(),
CommunityData(varCommunity),
UdpTransportTarget((varServer, varPort)),
ContextData(),
ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)))
next(g)
如果我加上
print(g)
我会得到以下输出
<generator object getCmd at 0x7f25964847d8>
next(g)
将 return 来自生成器的下一个值。如果您在 Python 控制台中键入此代码,您会看到实际结果。但是,由于您是 运行 来自文件的结果,结果将被丢弃。
您需要在其周围加上 print
。例如
print(next(g))
为了更容易调试,您可以像这样获得所有结果的列表:
print(list(g))
这是您的原始脚本,其中有一些更改和注释,希望可以帮助您加快使用 pysnmp 的速度:
from pysnmp.hlapi import *
varCommunity = "public"
varServer = "demo.snmplabs.com"
varPort = 161
g = getCmd(SnmpEngine(),
CommunityData(varCommunity),
UdpTransportTarget((varServer, varPort)),
ContextData(),
ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)))
# this is what you get from SNMP agent
error_indication, error_status, error_index, var_binds = next(g)
if not error_indication and not error_status:
# each element in this list matches a sequence of `ObjectType`
# in your request.
# In the code above you requested just a single `ObjectType`,
# thus we are taking just the first element from response
oid, value = var_binds[0]
print(oid, '=', value)
您可能会发现 pysnmp documentation 也很有见地。 ;-)