python net-snmp 的使用


         這一年一直在做一個綜合管控平台的項目,用python寫的,項目春節前可能就要進行實際部署了和測試,趁着這個空閑期,回顧一下項目中用到的一些技術,第一個就是SNMP協議。

        項目結構主要是實現對ipran網絡的監控和管理,工單派發等功能。ipran網絡設備類似於交換機,路由器。反正可以把它們想象成這類設備,因為原理基本差不多,除了一些特定的功能。既然是監控管理,必不可少的就是性能采集了。采用的是snmp協議(簡單網絡管理協議)。

  先來個snmp的簡介吧

1 SNMP

1.1  SNMP簡介

SNMP(Simple Network Management Protocol,簡單網絡管理協議)是互聯網中的一種網絡管理標准協議,廣泛用於實現管理設備對被管理設備的訪問和管理。SNMP具有以下優勢:

  • 支持網絡設備的智能化管理。利用基於SNMP的網絡管理平台,網絡管理員可以查詢網絡設備的運行狀態和參數,配置參數值,發現故障,完成故障診斷,進行容量規划和制作報告。
  • 支持對不同物理特性的設備進行管理。SNMP只提供最基本的功能集,使得管理任務與被管理設備的物理特性和聯網技術相對獨立,從而實現對不同廠商設備的管理。

1.1.1  SNMP的網絡架構

SNMP網絡架構由三部分組成:NMS、Agent和MIB。

  • NMS(Network Management System,網絡管理系統)是SNMP網絡的管理者,能夠提供友好的人機交互界面,方便網絡管理員完成大多數的網絡管理工作。
  • Agent是SNMP網絡的被管理者,負責接收、處理來自NMS的SNMP報文。在某些情況下,如接口狀態發生改變時,Agent也會主動向NMS發送告警信息。
  • MIB(Management Information Base,管理信息庫)是被管理對象的集合。NMS管理設備的時候,通常會關注設備的一些參數,比如接口狀態、CPU利用率等,這些參數就是被管理對象,在MIB中稱為節點。每個Agent都有自己的MIB。MIB定義了節點之間的層次關系以及對象的一系列屬性,比如對象的名稱、訪問權限和數據類型等。被管理設備都有自己的MIB文件,在NMS上編譯這些MIB文件,就能生成該設備的MIB。NMS根據訪問權限對MIB節點進行讀/寫操作,從而實現對Agent的管理。

NMS、Agent和MIB之間的關系如圖1-1所示。

圖1-1 NMS、Agent和MIB關系圖

 

 

 

1.1.2  MIB和MIB視圖

MIB以樹狀結構進行存儲。樹的每個節點都是一個被管理對象,它用從根開始的一條路徑唯一地識別(OID)。如圖1-2所示,被管理對象B可以用一串數字{1.2.1.1}唯一確定,這串數字是被管理對象的OID(Object Identifier,對象標識符)。

MIB視圖是MIB的子集合,將團體名/用戶名與MIB視圖綁定,可以限制NMS能夠訪問的MIB對象。當用戶配置MIB視圖包含某個MIB子樹時,NMS可以訪問該子樹的所有節點;當用戶配置MIB視圖不包含某個MIB子樹時,NMS不能訪問該子樹的所有節點。

圖1-2 MIB樹結構

 

先上兩個管理snmp的工具

snmpwalk

snmpwalk是一個SNMP小程序,它使用SNMP的GETNEXT請求查詢指定OID(SNMP協議中的對象標識)入口的所有OID樹信息,並顯示給用戶。

安裝方法:

我自己電腦是windows的,實際工作是linux的

snmpwalk沒有單獨的安裝包,它被包含在net-snmp軟件包中的,所以我們只需要安裝net-snmp軟件包就可以得到snmpwalk。

windows直接去網上下載安裝,跟安裝平常軟件沒有什么區別

使用方法:

snmpwalk -v 2或3(代表SNMP版本) -c SNMP讀密碼 IP地址 OID(對象標示符)

參數選項

–h:顯示幫助。

–v:指定snmp的版本, 1或者2c或者3。

–c:指定連接設備SNMP密碼。

–V:顯示當前snmpwalk命令行版本。

–r:指定重試次數,默認為0次。

–t:指定每次請求的等待超時時間,單為秒,默認為3秒。

–l:指定安全級別:noAuthNoPriv|authNoPriv|authPriv。

–a:驗證協議:MD5|SHA。只有-l指定為authNoPriv或authPriv時才需要。

–A:驗證字符串。只有-l指定為authNoPriv或authPriv時才需要。

–x:加密協議:DES。只有-l指定為authPriv時才需要。

–X:加密字符串。只有-l指定為authPriv時才需要。

 

另外一個是MIB Brower

    iReasoning MIB瀏覽器是一個強大和易於使用的工具由iReasoning SNMP API提供支持。 MIB瀏覽器是工程師管理啟用SNMP的網絡設備和應用程序不可或缺的工具。 它允許用戶加載標准的,專有的MIB,甚至一些錯誤的MIB。 它還允許它們發出SNMP請求以檢索代理的數據,或對代理進行更改。 內置陷阱接收器可以根據其規則引擎接收和處理SNMP陷阱。

下載地址:http://www.ireasoning.com/download.shtml

 這個使用比較簡單,只要填入HOST Address 和 OID 就能獲取信息了

 

python操作SNMP

 用python獲取snmp信息有多個現成的庫可以使用,其中比較常用的是netsnmppysnmp兩個庫。網上有較多的關於兩個庫的例子。

我們選擇的是netsnmp,python的netsnmp,其實是來自於net-snmp包。官網:http://www.net-snmp.org/download.html

在你下載的安裝包里有個python的目錄,那就是python的netsnmp

 

 切換到目錄下

python setup.py install 安裝就可以了

      

最后來一個小例子,展示一下netsnmp的用法

# -*- coding: utf-8 -*-
 
 
import netsnmp
 
 
class Snmp(object):
    """
    SNMP
    """
    def __init__(self, oid="sysDescr", version=1, destHost="localhost", community="public"):
        self.oid = oid
        self.version = version
        self.destHost = destHost
        self.community = community
 
    @property
    def query(self):
        """
        獲取snmp信息
        """
        try:
            result = netsnmp.snmpwalk(self.oid,
                                      Version=self.version,
                                      DestHost=self.destHost,
                                      Community=self.community)
        except Exception as e:
            result = None
        return result
 
 
def main():
   #oid 填寫name或oid號是等效的
    test_obj = SnmpClass(oid="1.3.6.1.4.1.9966.2.201.6.11.11", destHost="192.168.10.121")
    print test_obj.query
 
if __name__ == '__main__':
    main()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM