Python3 封装简化 easysnmp 包为 snmpLib

snmpLib.py

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

from easysnmp import snmp_walk, snmp_get


class SNMP(object):

    def __init__(self, hostname, community, port, version=2):
        self.data = {}
        self.port = port
        self.hostname = hostname
        self.community = community
        self.version = version
        self()

    def __call__(self):
        try:
            self._get_port_id()
            self._get_policy()
            self._get_behavior_id()
            self._get_speed()
        except Exception as e:
            raise ValueError('SNMP 连接失败: %s' % e)

    def _get_param(self, oid):
        return {'oids': oid, 'hostname': self.hostname, 'community': self.community, 'version': self.version}

    def _get_port_id(self):
        param = self._get_param('IF-MIB::ifDescr')
        data = [_port.oid_index for _port in snmp_walk(**param) if _port.value == self.port]
        port_id = ''.join(data if data else [])
        self.port_id = port_id

    def _get_policy(self):
        param = self._get_param('SNMPv2-SMI::enterprises.25506.2.65.2.1.4.1.1.3.%s.1' % self.port_id)
        data = snmp_get(**param)
        policy = data.value if data else ''
        self.data['policy'] = policy
        self.data['behavior'] = policy

    # def _get_policy_id(self):
    #     param = self._get_param('SNMPv2-SMI::enterprises.25506.2.65.2.1.3.2.1.2')
    #     data = [_policy.oid for _policy in snmp_walk(**param) if _policy.value == self.data.get('policy')]
    #     policy_id = ''.join(data if data else []).split('.')[-1]
    #     self.data['policy_id'] = policy_id

    # def _get_behavior(self):
    #     param = self._get_param('SNMPv2-SMI::enterprises.25506.2.65.2.1.3.3.1.5.%s.1' % self.data.get('policy_id'))
    #     data = snmp_get(**param)
    #     behavior = data.value if data else ''
    #     self.data['behavior'] = behavior

    def _get_behavior_id(self):
        param = self._get_param('SNMPv2-SMI::enterprises.25506.2.65.2.1.2.2.1.2')
        data = [_behavior.oid for _behavior in snmp_walk(**param) if _behavior.value == self.data.get('behavior')]
        behavior_id = ''.join(data if data else []).split('.')[-1]
        self.behavior_id = behavior_id

    def _get_speed(self):
        param = self._get_param('SNMPv2-SMI::enterprises.25506.2.65.2.1.2.3.1.1.%s' % self.behavior_id)
        data = snmp_get(**param)
        if data.value == 'NOSUCHINSTANCE':
            speed = -1
        else:
            speed = int(data.value) // 1000
        self.data['speed'] = speed

    def get_all(self):
        return self.data

    def get_data(self):
        return self.data

    def get_policy(self):
        return self.data.get('policy', None)

    def get_behavior(self):
        return self.data.get('behavior', None)

    def get_speed(self):
        return self.data.get('speed', None)


if __name__ == '__main__':
    snmp = SNMP('xxx', 'snmp_string', 'xxx')
    print(snmp.get_speed())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值