最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python封裝SNMP調(diào)用接口的示例代碼

 更新時間:2022年07月24日 08:16:45   作者:lyshark  
PySNMP?是一個純粹用Python實現(xiàn)的SNMP,用PySNMP的最抽象的API為One-line?Applications。本文為大家分享了Python封裝SNMP調(diào)用接口的示例代碼,需要的可以參考一下

PySNMP 是一個純粹用Python實現(xiàn)的SNMP,用PySNMP的最抽象的API為One-line Applications,其中有兩類API:同步的和非同步的,都在模塊pysnmp.entity.rfc3413.oneliner.cmdgen 中實現(xiàn),如下是Get方式與Walk方式的基本實現(xiàn).

首先需要在系統(tǒng)中安裝SNMP客戶端,對于Linux平臺來說只需要執(zhí)行如下配置過程即可.

[root@localhost ~]# yum install -y net-snmp
[root@localhost ~]# cat /etc/snmp/snmpd.conf |grep -vE "^#|^$"
com2sec notConfigUser  default       public

group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser

view    systemview    included   .1
view    systemview    included   .1

access  notConfigGroup  ""  any  noauth  exact  systemview none none

[root@localhost ~]# systemctl restart snmpd
[root@localhost ~]# systemctl enable snmpd

如果是Windows系統(tǒng)則需要在客戶機服務(wù)列表,開啟SNMP支持,并設(shè)置好一個團體名稱,如下圖。

當(dāng)我們配置好客戶端后,服務(wù)端就客戶獲取數(shù)據(jù)了,我們以一個OID序號為例,我們查詢特定序號對應(yīng)的名稱,然后將其記錄下來,例如下面這樣。

C:\Users\admin> snmpwalk -v 2c -c public 192.168.1.101 .1.3.6.1.2.1.25.2.2
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 2096632 KBytes

首先我們不使用PySNMP模塊直接開線程調(diào)用看看,該代碼如下所示.

import os,re,time

# 通過SNMP收集主機CPU利用率: 通過SNMP協(xié)議,收集目標(biāo)主機的CPU利用率(百分比),并返回JSON字符串.
def Get_CPU_Info(addr):
    try:
        Head = ["HostName","CoreLoad","CpuUser","CpuSystem","CpuIdle"]
        CPU = []
        ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " .1.3.6.1.2.1.1.5")
        CPU.append(ret.read().split(":")[3].strip())
        ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " .1.3.6.1.2.1.25.3.3.1.2")
        CPU.append(ret.read().split(":")[3].strip())

        for i in [9,10,11]:
            ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " 1.3.6.1.4.1.2021.11.{}.0".format(i))
            ret = ret.read()
            Info = ret.split(":")[3].strip()
            CPU.append(Info)
        return dict(zip(Head,CPU))
    except Exception:
        return 0

# 通過SNMP獲取系統(tǒng)CPU負(fù)載信息: 分別獲取到系統(tǒng)的1,5,15分鐘的負(fù)載信息,并返回JSON格式.
def Get_Load_Info(addr):
    try:
        Head = ["HostName","Load1","Load5","Load15"]
        SysLoad = []
        ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " .1.3.6.1.2.1.1.5")
        SysLoad.append(ret.read().split(":")[3].strip())

        ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " .1.3.6.1.4.1.2021.10.1.3")
        load = list(re.sub(".*STRING: ", "", ret.read()).split("\n"))
        SysLoad.append(load[0])
        SysLoad.append(load[1])
        SysLoad.append(load[2])
        return dict(zip(Head,SysLoad))
    except Exception:
        return 0

# 通過SNMP獲取系統(tǒng)內(nèi)存占用: 內(nèi)存利用率,獲取到之后,將其轉(zhuǎn)化為字典格式保存。
def Get_Mem_Info(addr):
    try:
        Head = ["HostName","memTotalSwap","memAvailSwap","memTotalReal","memTotalFree"]
        SysMem = []
        ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " .1.3.6.1.2.1.1.5")
        SysMem.append(ret.read().split(":")[3].strip())
        ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " .1.3.6.1.4.1.2021.4")
        mem = ret.read().split("\n")
        for i in [2,3,4,6]:
            SysMem.append(re.sub(".*INTEGER: ","",mem[i]).split(" ")[0])
        return dict(zip(Head,SysMem))
    except Exception:
        return 0

# 通過SNMP獲取系統(tǒng)磁盤數(shù)據(jù): 這個案例并不完整,我只寫了一點,后面有個問題一直沒有解決.
def Get_Disk_Info(addr):
    try:
        dic = {}
        list = []
        ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " HOST-RESOURCES-MIB::hrStorageDescr")
        DiskName = ret.read().split("\n")
        ret =os.popen("snmpwalk -v 2c -c nmap " + addr + " HOST-RESOURCES-MIB::hrStorageUsed")
        DiskUsed = ret.read().split("\n")
        ret = os.popen("snmpwalk -v 2c -c nmap " + addr + " HOST-RESOURCES-MIB::hrStorageSize")
        DiskSize = ret.read().split("\n")

        for i in range(1,len(DiskName) - 7):
            dic["Name"]= DiskName[i + 5].split(":")[3]
            dic["Used"]= DiskUsed[i + 5].split(":")[3]
            dic["Size"]= DiskSize[i + 5].split(":")[3]
            list.append(dic)
        return list
    except Exception:
        return 0

if __name__ == '__main__':
    for i in range(100):
        dic = Get_CPU_Info("192.168.1.20")
        print(dic)
        time.sleep(1)

我們使用pysnmp模塊來做,安裝pysnmp很簡單,執(zhí)行命令pip install pysnmp 即可,安裝后使用以下代碼執(zhí)行即可獲取到目標(biāo)數(shù)據(jù),獲取方式分為兩種一種為Get另一種為Walk.

from pysnmp.hlapi import *
import os,sys

class NetSNMP():
    def __init__(self,address,region):
        self.region = region
        self.address = address

    # 獲取指定數(shù)據(jù)的方法
    def GetNumber(self,oid,sub_oid,sub_id):
        iterator = getCmd(SnmpEngine(),
                          CommunityData(self.region),
                          UdpTransportTarget((self.address, 161)),
                          ContextData(),
                          ObjectType(ObjectIdentity(oid, sub_oid, sub_id)))
        errorIndication, errorStatus, errorIndex, varBinds = next(iterator)

        if errorIndication:
            return False
        else:
            if errorStatus:
                return False
            else:
                for varBind in varBinds:
                    return [x.prettyPrint() for x in varBind]

    # 使用Walk拉取數(shù)據(jù)
    def WalkNumber(self, oid):
        res = []
        for (errorIndication, errorStatus, errorIndex, varBinds) in nextCmd(SnmpEngine(),
             CommunityData(self.region),UdpTransportTarget((self.address, 161)),ContextData(),
             ObjectType(ObjectIdentity(oid)).addMibSource(
             './site-packages/pysnmp/smi/mibs','pysnmp_mibs'),lexicographicMode=False):
            if errorIndication:
                print(errorIndication, file=sys.stderr)
                break
            elif errorStatus:
                print('%s at %s' % (errorStatus.prettyPrint(),
                                    errorIndex and varBinds[int(errorIndex) - 1][0] or '?'),
                      file=sys.stderr)
                break
            else:
                for varBind in varBinds:
                    res.append(str(varBind))
        return res

if __name__ == "__main__":

    # 初始化
    ptr = NetSNMP("192.168.81.130","public")

    # 使用GET方式獲取OID數(shù)據(jù)
    ret = ptr.GetNumber("HOST-RESOURCES-MIB","hrMemorySize",0)
    print("類型: {} --> 返回結(jié)果: {} --> 解析: {}".format(type(ret),ret,ret[1]))

    # 使用Walk方式獲取OID數(shù)據(jù)
    ret = ptr.WalkNumber(".1.3.6.1.2.1.2.2.1.6")
    for each in ret:
        mac = each.split("=")[1]
        if len(mac) > 1:
            print("網(wǎng)卡接口: {}".format(mac))

以上就是Python封裝SNMP調(diào)用接口的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Python SNMP調(diào)用接口的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python連接PostgreSQL數(shù)據(jù)庫并查詢數(shù)據(jù)的詳細(xì)指南

    Python連接PostgreSQL數(shù)據(jù)庫并查詢數(shù)據(jù)的詳細(xì)指南

    在現(xiàn)代軟件開發(fā)中,數(shù)據(jù)庫是存儲和檢索數(shù)據(jù)的核心組件,PostgreSQ是一個功能強大的開源對象關(guān)系數(shù)據(jù)庫系統(tǒng),它以其穩(wěn)定性、強大的功能和靈活性而聞名,Python作為一種流行的編程語言,與PostgreSQL的結(jié)合使用非常廣泛,本文介紹了Python連接PostgreSQL數(shù)據(jù)庫并查詢數(shù)據(jù)
    2024-12-12
  • python drf各類組件的用法和作用

    python drf各類組件的用法和作用

    這篇文章主要介紹了python drf各類組件的用法和作用,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2021-01-01
  • python中有幫助函數(shù)嗎

    python中有幫助函數(shù)嗎

    在本篇文章里小編給大家分享的是一篇關(guān)于python幫助函數(shù)詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python OpenCV學(xué)習(xí)之圖像濾波詳解

    Python OpenCV學(xué)習(xí)之圖像濾波詳解

    圖像濾波的作用簡單來說就是將一副圖像通過濾波器得到另一幅圖像;明確一個概念,濾波器又被稱為卷積核,濾波的過程又被稱為卷積;實際上深度學(xué)習(xí)就是訓(xùn)練許多適應(yīng)任務(wù)的濾波器,本質(zhì)上就是得到最佳的參數(shù)。下面來跟隨小編一起深入了解一下圖像濾波吧
    2022-01-01
  • Python多路復(fù)用selector模塊的基本使用

    Python多路復(fù)用selector模塊的基本使用

    Python提供了selector模塊來實現(xiàn)IO多路復(fù)用,這篇文章給大家介紹了Python多路復(fù)用selector模塊的基本使用,感興趣的朋友一起看看吧
    2021-11-11
  • python3在同一行內(nèi)輸入n個數(shù)并用列表保存的例子

    python3在同一行內(nèi)輸入n個數(shù)并用列表保存的例子

    今天小編就為大家分享一篇python3在同一行內(nèi)輸入n個數(shù)并用列表保存的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 解決python ogr shp字段寫入中文亂碼的問題

    解決python ogr shp字段寫入中文亂碼的問題

    今天小編就為大家分享一篇解決python ogr shp字段寫入中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python實現(xiàn)自定義函數(shù)的5種常見形式分析

    Python實現(xiàn)自定義函數(shù)的5種常見形式分析

    這篇文章主要介紹了Python實現(xiàn)自定義函數(shù)的5種常見形式,結(jié)合實例形式較為詳細(xì)的分析了Python自定義函數(shù)相關(guān)的參數(shù)、默認(rèn)值、隱函數(shù)等相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-06-06
  • Python爬蟲框架scrapy實現(xiàn)downloader_middleware設(shè)置proxy代理功能示例

    Python爬蟲框架scrapy實現(xiàn)downloader_middleware設(shè)置proxy代理功能示例

    這篇文章主要介紹了Python爬蟲框架scrapy實現(xiàn)downloader_middleware設(shè)置proxy代理功能,結(jié)合實例形式分析了scrapy框架proxy代理設(shè)置技巧與相關(guān)問題注意事項,需要的朋友可以參考下
    2018-08-08
  • 基于Python實現(xiàn)繪制屬于你的世界地圖

    基于Python實現(xiàn)繪制屬于你的世界地圖

    Python之所以這么流行,是因為它不僅能夠應(yīng)用于科技領(lǐng)域,還能用來做許多其他學(xué)科的研究工具,繪制地圖便是其功能之一。本文我們將用matplot工具包之一的  mpl_toolkits  來繪制世界地圖,需要的可以參考一下
    2022-11-11

最新評論

剑河县| 乌鲁木齐县| 楚雄市| 盈江县| 万全县| 荔波县| 凭祥市| 凌云县| 宝丰县| 江阴市| 麻阳| 华蓥市| 岳阳县| 仙游县| 原阳县| 集贤县| 库车县| 永城市| 天津市| 云安县| 巴林右旗| 红桥区| 洛阳市| 连南| 桃江县| 土默特右旗| 安康市| 四会市| 财经| 即墨市| 韩城市| 兴山县| 宽城| 青阳县| 紫云| 南靖县| 揭西县| 高台县| 松阳县| 驻马店市| 嘉义市|