用Python开发一个h3c交换机的snmp采集代码

我来帮你编写一个使用 Python 通过 SNMP 采集 H3C 交换机信息的代码。我们将使用 pysnmp 库来实现 SNMP 功能。首先需要安装必要的库:

pip install pysnmp

下面是一个基础的采集代码示例,包含了一些常用的 OID:

from pysnmp.hlapi import *

class H3CSnmpCollector:
    def __init__(self, host, community='public', port=161):
        self.host = host
        self.community = community
        self.port = port
        
    def get_snmp_data(self, oid):
        error_indication, error_status, error_index, var_binds = next(
            getCmd(SnmpEngine(),
                  CommunityData(self.community),
                  UdpTransportTarget((self.host, self.port)),
                  ContextData(),
                  ObjectType(ObjectIdentity(oid)))
        )
        
        if error_indication:
            print(f"错误: {error_indication}")
            return None
        elif error_status:
            print(f"错误状态: {error_status.prettyPrint()}")
            return None
        else:
            for varBind in var_binds:
                return varBind[1]
    
    def get_system_info(self):
        # 系统信息的 OID
        oids = {
            'sysDescr': '1.3.6.1.2.1.1.1.0',
            'sysUpTime': '1.3.6.1.2.1.1.3.0',
            'sysContact': '1.3.6.1.2.1.1.4.0',
            'sysName': '1.3.6.1.2.1.1.5.0',
            'sysLocation': '1.3.6.1.2.1.1.6.0'
        }
        
        result = {}
        for key, oid in oids.items():
            result[key] = str(self.get_snmp_data(oid))
        return result
    
    def get_interface_info(self):
        # 接口信息的 OID
        interface_oids = {
            'ifDescr': '1.3.6.1.2.1.2.2.1.2',
            'ifType': '1.3.6.1.2.1.2.2.1.3',
            'ifMtu': '1.3.6.1.2.1.2.2.1.4',
            'ifSpeed': '1.3.6.1.2.1.2.2.1.5',
            'ifPhysAddress': '1.3.6.1.2.1.2.2.1.6',
            'ifAdminStatus': '1.3.6.1.2.1.2.2.1.7',
            'ifOperStatus': '1.3.6.1.2.1.2.2.1.8'
        }
        
        # 获取接口数量
        for varBind in nextCmd(SnmpEngine(),
                             CommunityData(self.community),
                             UdpTransportTarget((self.host, self.port)),
                             ContextData(),
                             ObjectType(ObjectIdentity('1.3.6.1.2.1.2.2.1.1')),
                             lexicographicMode=False):
            print(f"接口信息: {varBind[0][1]}")

def main():
    # 使用示例
    collector = H3CSnmpCollector(
        host='192.168.1.1',  # 替换为你的交换机 IP
        community='public',   # 替换为你的 SNMP 团体名
        port=161
    )
    
    # 获取系统信息
    system_info = collector.get_system_info()
    print("\n系统信息:")
    for key, value in system_info.items():
        print(f"{key}: {value}")
    
    # 获取接口信息
    print("\n接口信息:")
    collector.get_interface_info()

if __name__ == '__main__':
    main()

这个代码提供了以下功能:

  1. 基础的 SNMP 查询功能
  2. 系统信息采集(包括系统描述、运行时间、联系人、设备名称、位置等)
  3. 接口信息采集(包括接口描述、类型、MTU、速度、物理地址、管理状态、运行状态等)

使用方法:

  1. 修改 main() 函数中的 hostcommunity 参数为你的实际环境配置
  2. 运行脚本即可获取交换机信息

注意事项:

  1. 确保交换机已启用 SNMP 功能
  2. 确保配置了正确的 SNMP 团体名(community)
  3. 确保网络连接正常且防火墙允许 SNMP 流量(UDP 161端口)

如果你需要采集其他特定信息,可以添加相应的 OID。H3C 设备还有一些私有 MIB,OID 通常以 1.3.6.1.4.1.2011 开头。你可以根据需要扩展代码,添加更多的采集功能。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的土拨鼠呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值