首页 > 编程语言 >python通过snmp获取交换机端口状态

python通过snmp获取交换机端口状态

时间:2023-02-27 17:45:37浏览次数:38  
标签:status ifstatus python ifnumber oid snmp 交换机 inter self

from pysnmp.entity.rfc3413.oneliner import cmdgen


class NumberStatus:
    def __int__(self, host):
        self.host = host

    def walk(self, dswitch, commVlan, oid):
        errorIndication, errorStatus, errorIndex, \
        generic = cmdgen.CommandGenerator().nextCmd(cmdgen.CommunityData('my-agent', commVlan, 1),
                                                    cmdgen.UdpTransportTarget((dswitch, 161)), oid, maxRows=10000)
        try:
            if errorIndication or errorStatus or errorIndex:
                print(errorIndication, errorStatus, errorIndex, generic)
        except:
            return errorIndication
        return generic

    # 获取出oid和接口编号的对应关系
    def get_number(self):
        ifnumber = self.walk(self.host, "community", (1, 3, 6, 1, 2, 1, 2, 2, 1, 2))  # 通过oid获取端口编号
        inter_desc = {}
        for i in ifnumber:
            oid_ifnumber = ''
            for j in i:
                # print(j)
                oid_ifnumber += str(j)
            oid_ifnumber = oid_ifnumber.replace("SNMPv2-SMI::mib-2.2.2.1.2", "")
            oid_ifnumber = oid_ifnumber[oid_ifnumber.find('.') + 1:]
            oid_ifnumber = oid_ifnumber.split(' = ')
            port = oid_ifnumber[0]
            num = oid_ifnumber[1]
            inter_desc[port] = num
            #字典中排除非物理接口,如null0,管理口,捆绑口等
            for key in list(inter_desc):
                if 'GigabitEthernet' not in inter_desc[key] and 'Ten-GigabitEthernet' not in inter_desc[key]:
                    del inter_desc[key]
            for key2 in list(inter_desc):
                if 'M-GigabitEthernet' in inter_desc[key2]:
                    del inter_desc[key2]
        return inter_desc
        # print(inter_desc)

    # 获取出oid和接口状态的对应关系
    def get_status(self):
        ifstatus = self.walk(self.host, "community", (1, 3, 6, 1, 2, 1, 2, 2, 1, 8))  # 通过oid获取端口状态
        inter_status = {}
        for i in ifstatus:
            oid_ifstatus = ''
            for j in i:
                # print(j)
                oid_ifstatus += str(j)
            oid_ifstatus = oid_ifstatus.replace("SNMPv2-SMI::mib-2.2.2.1.8", "")
            oid_ifstatus = oid_ifstatus[oid_ifstatus.find('.') + 1:]
            #状态为1得修改为up,状态为2得修改为down
            if '= 1' in oid_ifstatus:
                oid_ifstatus = oid_ifstatus.replace(' = 1', ' = up')
            if '= 2' in oid_ifstatus:
                oid_ifstatus = oid_ifstatus.replace(' = 2', ' = down')
            oid_ifstatus = oid_ifstatus.split(' = ')
            port = oid_ifstatus[0]
            state = oid_ifstatus[1]
            inter_status[port] = state
        return inter_status
        # print(inter_status)

    def num_status(self):
        numstauts = {}
        port_status = self.get_status() #提前获取状态信息,避免每次for循环都需要调用获取状态信息得函数,导致运行很慢
        for port, number in self.get_number().items():
            numstauts[number] = port_status[port]
            # print(number, result.get_status()[port])
        return numstauts


result = NumberStatus()
result.host = '10.0.253.1'
port_status = result.num_status()
print(port_status)

 

标签:status,ifstatus,python,ifnumber,oid,snmp,交换机,inter,self
From: https://www.cnblogs.com/xiaomantou/p/17160628.html

相关文章

  • python -- PyQt5(designer)安装详细教程
    摘自:https://blog.csdn.net/weixin_64338372/article/details/128111818先展示一下安装好后的效果如下:  PyQt5基本教程大全​​​​​​​http://t.csdn.cn/L50jl......
  • 【Python】判断字符串输入合法化
    Python判断字符串输入合法化​​只包含数字​​​​包含数字​​​​只包含中文​​​​包含中文​​​​只包含字母​​​​包含字母​​只包含数字判断字符串是否只包含数......
  • 【Python】a[1:-1]、a[-1]、a[:-1]、a[::-1]、a[n::-1]等操作的区别
    a[1:-1]a[n:-n]作用是去除前n个元素和末n个元素>>>a=(1,2,3,4,5)>>>a[1:-1](2,3,4)>>>a=(1,2,3,4,5)>>>a[2:-2](3,)a[-1]a[-n]作用是取倒数第n个元素>>>a=(1,2,3,4,5......
  • 【Python】ImportError: No module named ‘google‘最全解决方法
    跑程序遇到了这个问题,改了好久才解决,由于每个人实际情况不同,现列出各种解决办法:我的环境:pycharmpython3.7首先确定是否装了google这个包,如果依然报错再找问题1这是我成......
  • 【Python】 basemap 报错‘module‘ object is not callable
    报错:Traceback(mostrecentcalllast):File"/Users/ddd/Desktop/map_01.py",line5,in<module>m=Basemap()#使用Basemap()创建一个地图File"/Users/ddd......
  • 使用python暴力破解WiFi密码
    当我们遇到没有网络,有WiFi但不知道密码的情况或者是练习python时可以使用这几行简单的代码去破解wifi密码准备工作一:python环境二:pycharm/其他可以运行python代码平台......
  • python序列化 json和pickle
    #1、什么是序列化#序列化指的是把内存的数据类型转成一个特定格式的内容#该格式的内容可用于存储或者传输给其它平台使用#内存中的数据类型---》序列化----》特定......
  • python文件操作02 文件指针
    #一:读相关操作#1、readline:一次读一行#withopen(r'g.txt',mode='rt',encoding='utf-8')asf:##res1=f.readline()##res2=f.readline()##prin......
  • Python文件操作01 t模式
    如何用文件:open()和withopen()as控制文件读写内容的模式:t和b强调:t和b不能单独使用,必须跟r/w/a连用t文本(默认的模式)1......
  • Python 错误:ModuleNotFoundError: No module named 'conf'
    问题描述:编译器无法使用cmd命令来执行py文件,结果可能报ModuleNotFoundError的错误。比如在cmd任务栏执行:python E:\myProgram\Python\spider\NetDealer\core\ot......