這一年一直在做一個綜合管控平台的項目,用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信息有多個現成的庫可以使用,其中比較常用的是netsnmp
和pysnmp
兩個庫。網上有較多的關於兩個庫的例子。
我們選擇的是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()