snmp-cmds:最简单的调用 Net-SNMP 二进制文件作为子进程的库可移植python SNMP 库

 

  

snmp-cmds 是一个 Python 库,用于通过 SNMP 与目标设备进行通信

那里有很多 SNMP 库。何苦?

确实有很多很棒的 SNMP 库可用于 python。

有些,比如 PySNMP,是纯 Python 的。这使得它们跨平台的可移植性令人难以置信,这很棒,但也使它们相对较慢。此外,与 PySNMP 一样令人惊奇的是,它并不以其易用性而著称。

有些,如 net-snmp 绑定和 easysnmp,是作为 Net-SNMP 等 C 库的扩展而构建的。这使得它们非常快速和高效,但需要在它们分布的每个平台上编译它们,并针对特定版本的 Net-SNMP 库进行编译。根本不是很便携。

在编写这个库时,我开始寻找一个中间立场。一个可以利用 Net-SNMP 项目的功能和速度的库,同时是可移植的纯 python 并且不依赖于任何特定版本的 Net-SNMP。我通过制作一个调用 Net-SNMP 二进制文件作为子进程的库来实现这一点。

虽然这个库应该可以在安装了 Net-SNMP 的 Windows 平台上运行,但它尚未在 Windows 上进行测试。谨慎使用。

要求

此软件包需要在您的系统上安装以下软件:

  • `Net-SNMP<http://net-snmp.org>`_(可以在 Ubuntu上安装)sudo apt-get install snmp
  • IETF RFC MIB(可以在 Ubuntu上安装)sudo apt-get install snmp-mibs-downloader
  • 蟒蛇 3.5+

安装

简单的方法:

pip3 安装 snmp - cmds

艰难的方式:

git  clone  https : // github . com / alextremblay / snmp - cmds 。git 
cd  snmp - cmds 
pip  install  .

用法:API 

如果要向一两个 SNMP 目标发出多个 SNMP 请求,则需要使用 API:

从 snmp_cmds 导入 会话

my_device  =  Session ( ipaddress = '10.0.0.1' , 
                    read_community = 'secret password' , 
                    write_community = 'SUPER secret password' )

system_name_string  =  my_device 。get ( 
                         oid = 'SNMPv2-MIB::sysName.0' )

new_name_string  =  '让我们重命名这个设备' 
my_device 。设置( oid = 'SNMPv2-MIB::sysName.0' ,  value_type = 's' , 
              value = new_name_string )

会话 API 方法:get、get_some、get_table、walk、set

用法:命令

如果您想向多个目标发出几个 SNMP 请求,请考虑使用单独的 snmp 命令功能;前任:

从 snmp_cmds 导入 snmpwalk

结果 =  snmpwalk ( community = '我的读取密码' , 
                  ipaddress = '192.xxx' , 
                  oid = 'SNMPv2-MIB::system' )

print ( result )   # 打印元组列表,每个元组包含
               # OID 和在该 OID 处找到的值。

可用命令:snmpget snmpget。snmpgetsome、snmpwalk、snmptable、snmpset

有关命令的更多信息,请参阅命令。有关 API 的更多信息,请参阅API

指数和表格

snmp_cmds.commands 模块

该模块提供单独的 SNMP 命令,用于一次性情况,或您需要向多个设备发出单个 SNMP 请求的情况。如果您计划对同一设备进行多次调用,则可能需要查看 api.py。

snmp_cmds.commands.snmpgetipaddress , oid , community='public' , port=161 , timeout=3 )[来源]

包装 Net-SNMP 的snmpget命令

运行等效的“ ”并解析结果。如果来自服务器的响应是 错误或错误,则此函数返回 。否则,它返回从服务器检索到的值snmpget -Oqv -Pe -t {timeout} -r 0 -v 2c -c {community} {host} {oid}No Such ObjectNo Such InstanceNone

参数:
  • 社区str) – snmpv2 社区字符串
  • ipaddress ( str) – 目标 SNMP 服务器的 IP 地址
  • oid ( str) – 从目标 SNMP 服务器请求的对象标识符
  • 端口Unionintstr]) – SNMP 在目标服务器上运行的端口
  • timeout ( Unionintstr]) – 等待 SNMP 服务器响应的秒数
返回类型:

Optionalstr]

返回:

如果成功,None则存储在目标 SNMP 服务器上该 OID 的值,否则

提高:
  • SNMPTimeout – 如果目标 SNMP 服务器未能响应
  • SNMPInvalidAddress – 如果提供的主机名或 IP 地址无效或无法解析
  • SNMPError – 如果底层 Net-SNMP 命令产生未知或未处理的错误

snmp_cmds.commands.snmpgetsomeipaddress , oids , community='public' , port=161 , timeout=3 )[来源]

围绕 Net-SNMP 的 Warper

在 OID 列表上运行 Net-SNMP 的“snmpget”命令,并返回形式为 (oid, result) 的元组列表。

参数:
  • 社区str) – snmpv2 社区字符串
  • ipaddress ( str) – 目标 SNMP 服务器的 IP 地址
  • oids ( Liststr]) – 从目标 SNMP 服务器请求的对象标识符列表
  • 端口Unionstrint]) – SNMP 在目标服务器上运行的端口
  • timeout ( Unionintstr]) – 等待 SNMP 服务器响应的秒数
返回类型:

ListTuplestrstr]]

返回:

形式为 (oid, result) 的元组列表

提高:
  • SNMPTimeout – 如果目标 SNMP 服务器未能响应
  • SNMPInvalidAddress – 如果提供的主机名或 IP 地址无效或无法解析
  • SNMPError – 如果底层 Net-SNMP 命令产生未知或未处理的错误

snmp_cmds.commands.snmpsetipaddress , oid , value_type , value , community='private' , port=161 , timeout=3 )[来源]

在给定的 OID 上运行 Net-SNMP 的“snmpset”命令,如果成功则返回结果。

参数:
  • 社区str) – snmpv2 社区字符串
  • ipaddress ( str) – 目标 SNMP 服务器的 IP 地址
  • oid ( str) – 从目标 SNMP 服务器请求的对象标识符
  • value_type ( str) – 要设置的 SNMP 值类型。可以是 (i/u/t/a/o/s/x/d/b) 之一
  • value ( str) – 要设置的值
  • 端口Unionintstr]) – SNMP 在目标服务器上运行的端口
  • timeout ( Unionintstr]) – 等待 SNMP 服务器响应的秒数
返回类型:

str

返回:

在 SNMP 目标上设置的值

提高:
  • SNMPTimeout – 如果目标 SNMP 服务器未能响应
  • SNMPInvalidAddress – 如果提供的主机名或 IP 地址无效或无法解析
  • SNMPError – 如果底层 Net-SNMP 命令产生未知或未处理的错误
  • SNMPWriteError – 如果 snmpset 操作因已知原因失败。与此错误相关的消息应始终包含有关错误原因的信息。

snmp_cmds.commands.snmptableipaddress , oid , community='public' , port=161 , timeout=3 , sortkey=None )[来源]

在给定的 OID 上运行 Net-SNMP 的“snmptable”命令,将结果转换为字典列表,并可选择按给定的键对列表进行排序。

参数:
  • 社区str) – snmpv2 社区字符串
  • ipaddress ( str) – 目标 SNMP 服务器的 IP 地址
  • oid ( str) – 从目标 SNMP 服务器请求的对象标识符
  • 端口Unionstrint]) – SNMP 在目标服务器上运行的端口
  • sortkey ( Optionalstr]) – 每个字典中的键,用于对结果列表进行排序
  • timeout ( int) – 等待 SNMP 服务器响应的秒数
返回类型:

UnionListDictstrstr]], DictstrDictstrstr]]]

返回:

一个字典列表,表的每一行一个。dicts 的键对应于表的列名。

提高:
  • SNMPTimeout – 如果目标 SNMP 服务器未能响应
  • SNMPInvalidAddress – 如果提供的主机名或 IP 地址无效或无法解析
  • SNMPError – 如果底层 Net-SNMP 命令产生未知或未处理的错误
  • SNMPTableError – 如果请求的 OID 不是有效表

snmp_cmds.commands.snmpwalkipaddress , oid , community='public' , port=161 , timeout=3 )[来源]

在 OID 列表上运行 Net-SNMP 的“snmpget”命令,并返回形式为 (oid, result) 的元组列表。

参数:
  • 社区str) – snmpv2 社区字符串
  • ipaddress ( str) – 目标 SNMP 服务器的 IP 地址
  • oid ( str) – 从目标 SNMP 服务器请求的对象标识符
  • 端口Unionstrint]) – SNMP 在目标服务器上运行的端口
  • timeout ( int) – 等待 SNMP 服务器响应的秒数
返回类型:

ListTuplestrstr]]

返回:

形式为 (oid, result) 的元组列表

提高:
  • SNMPTimeout – 如果目标 SNMP 服务器未能响应
  • SNMPInvalidAddress – 如果提供的主机名或 IP 地址无效或无法解析
  • SNMPError – 如果底层 Net-SNMP 命令产生未知或未处理的错误
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在这个问题中,用户遇到了一个问题,即在xshell中运行命令"keytool"时出现了"-bash: keytool:未找到命令"的错误提示。根据引用,这可能是由于Bash中的安全漏洞导致的。此漏洞可以在受限模式(rbash)中通过将命令添加到BASH_CMDS数组,调用包含斜杠的命令来实现。 要解决这个问题,可以尝试以下几步: 1. 首先,确保你的系统已经安装了keytool命令。可以通过运行以下命令来检查: sudo yum update -y perl-macros perl-Pod-Escapes perl perl-libs 这个命令将帮助你更新所需的perl软件包。 2. 如果keytool命令已经安装,但仍然出现"-bash: keytool:未找到命令"的错误提示,那么你可以尝试重新安装keytool。你可以通过完全卸载后再重新安装来实现。确保在重新安装之前不要断开xshell的远程连接,以确保安装过程顺利进行。具体的安装和卸载步骤可能因操作系统和软件版本而有所不同,建议你查阅相应的文档或官方网站以获取详细的安装和卸载说明。 你可以参考https://www.openssh.com/releasenotes.html 网站上的文档,了解更多关于OpenSSH软件的版本信息和更新内容。 如果问题仍然存在,建议你检查系统的环境变量配置和权限设置,确保keytool命令在可执行路径中,并且用户具有执行该命令的权限。 总之,要解决xshell中出现"-bash: keytool:未找到命令"的错误提示,你可以尝试更新perl软件包、重新安装keytool、检查环境变量配置和权限设置等方法。希望这些步骤能够帮助你解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Centos7系统安全漏洞及修复方案](https://blog.csdn.net/Sara_cloud/article/details/115456192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值