跳转到主要内容

Python SNMP库

项目描述

Python SNMP库

Become a Sponsor PyPI PyPI Downloads Python Versions GitHub license

这是一个在2-clause BSD许可证下发布的纯Python、开源和免费实现的v1/v2c/v3 SNMP引擎。

PySNMP项目最初由PSF资助。谢谢!

此仓库是Ilya Etingof的项目etingof/pysnmp的分支,但LeXtudio Inc.正在接管整个PySNMP生态系统,包括库、文档和网站。

Ilya不幸于2022年8月10日去世。公告在这里。他的工作对Python社区仍然非常有用,我们将怀念他。

特性

  • 完全支持SNMPv1/v2c和SNMPv3
  • SMI框架用于解析MIB信息并实现SMI管理对象
  • 完整的SNMP实体实现
  • 支持USM扩展安全选项(3DES,192/256位AES加密)
  • 可扩展的网络传输框架(UDP/IPv4,UDP/IPv6)
  • 支持异步基于套接字的IO API
  • Asyncio集成
  • PySMI集成以动态编译MIB
  • 内置的仪器公开协议引擎操作
  • 与Python eggs和py2exe兼容
  • 100% Python,与Python 3.8+兼容
  • MT-safe(如果SnmpEngine是线程局部)

以下功能是特定于SNMPv3模型的:

  • USM认证(MD5/SHA-1/SHA-2)和隐私(DES/AES)协议(RFC3414,RFC7860)
  • 基于视图的访问控制,可与任何SNMP模型一起使用(RFC3415)
  • 内置SNMP代理PDU转换器,用于构建多语言SNMP实体(RFC2576)
  • 远程SNMP引擎配置
  • 可选的SNMP引擎发现
  • 附带标准SNMP应用程序(RFC3413)

下载 & 安装

PySNMP软件可以从PyPIGitHub免费下载。

只需运行

$ pip install pysnmp-lextudio

下载并安装PySNMP及其依赖项

除了库之外,还可以通过以下方式安装纯Python编写的SNMP工具

$ pip install snmpclitools-lextudio

并且可以使用与传统的Net-SNMP工具非常相似的方式使用它们

$ snmpget.py -v3 -l authPriv -u usr-md5-des -A authkey1 -X privkey1 demo.pysnmp.com sysDescr.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux zeus 4.8.6.5-smp #2 SMP Sun Nov 13 14:58:11 CDT 2016 i686

示例

PySNMP采用分层设计。最高级且最易使用的API称为hlapi。以下是一个关于如何进行SNMP GET的快速示例

from pysnmp.hlapi.asyncio import *
from pysnmp.smi.rfc1902 import ObjectIdentity, ObjectType

with Slim(1) as slim:
    errorIndication, errorStatus, errorIndex, varBinds = await slim.get(
        'public',
        'demo.pysnmp.com',
        161,
        ObjectType(ObjectIdentity("SNMPv2-MIB", "sysDescr", 0)),
    )

    if errorIndication:
        print(errorIndication)
    elif errorStatus:
        print(
            "{} at {}".format(
                errorStatus.prettyPrint(),
                errorIndex and varBinds[int(errorIndex) - 1][0] or "?",
            )
        )
    else:
        for varBind in varBinds:
            print(" = ".join([x.prettyPrint() for x in varBind]))

这是发送SNMP TRAP的方法

from pysnmp.hlapi.asyncio import *


snmpEngine = SnmpEngine()
errorIndication, errorStatus, errorIndex, varBinds = await sendNotification(
    snmpEngine,
    CommunityData('public', mpModel=0),
    UdpTransportTarget(('demo.pysnmp.com', 162)),
    ContextData(),
    "trap",
    NotificationType(ObjectIdentity("1.3.6.1.6.3.1.1.5.2")).addVarBinds(
        ("1.3.6.1.6.3.1.1.4.3.0", "1.3.6.1.4.1.20408.4.1.1.2"),
        ("1.3.6.1.2.1.1.1.0", OctetString("my system")),
    ),
)

if errorIndication:
    print(errorIndication)

snmpEngine.closeDispatcher()

我们维护公开的SNMP代理和TRAP接收器在demo.pysnmp.com。欢迎您在使用任何SNMP软件时进行实验。

$ python3 examples/hlapi/asyncio/manager/cmdgen/usm-sha-aes128.py
SNMPv2-MIB::sysDescr.0 = SunOS zeus.pysnmp.com 4.1.3_U1 1 sun4m
$
$ python3 examples/hlapi/asyncio/agent/ntforg/v3-inform.py
SNMPv2-MIB::sysUpTime.0 = 0
SNMPv2-MIB::snmpTrapOID.0 = SNMPv2-MIB::warmStart
SNMPv2-MIB::sysName.0 = system name

除此之外,PySNMP能够自动从HTTP站点或本地目录获取并使用所需的MIB。您可以为此目的配置任何可用的MIB源(包括这个)。

有关更多示例脚本,请参阅PySNMP网站上的示例部分

文档

库文档和示例可以在PySNMP文档网站找到。

如果某些事情没有按预期工作,请在GitHub上打开一个问题在Stack Overflow上提问

欢迎提交错误报告和PR!;-)

版权(c)2005-2020,Ilya Etingof。版权(c)2022-2024,LeXtudio Inc。保留所有权利。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

pysnmp_lextudio-6.2.1.tar.gz (416.0 kB 查看散列值)

上传时间 源代码

构建版本

pysnmp_lextudio-6.2.1-py3-none-any.whl (272.5 kB 查看散列值)

上传时间 Python 3

由以下支持