用snmp4j開發網管應用(一)
要開發網管應用,SNMP是必學的協議,這裡首先對SNMP進行一下簡單的介紹和想要開發SNMP協議的內容所需要用到的工具。
SNMP
SNMP 協議分為了多個版本,V1太簡單,V2加入了一些驗證,V3最嚴謹,下面都是以V2進行說明
概念:
ASN.1 高階資料描述語言,用於定義資料型別,語法規則等。
BER ASN.1的基本編碼規則,傳送訊息之前經過其編碼,接收後先解碼
SMI 管理資訊結構,ASN.1的子集加上一部分巨集等內容。SNMP用它來描述MIB和PDU
MIB 管理資訊庫,一般是一個樹形結構,使用SMI描述,用來定義一個或者多個網元
OID 網路節點的唯一ID,用在MIB中,是一個國際機構統一分配的,比如1.3.6.1.4.1代表enterprises企業網
PDU SNMP協議資料單元,是一個數據包的格式。每一種SNMP方法對應一種PDU,使用SMI描述,BER編碼,傳輸層(UDP)協議進行傳輸
SNMP跟網管有關的開發可能會涉及如下的內容:
1. 獲取網元資訊
- 網元已經存在,其提供MIB檔案,其中定義了該網元節點的結構以及想獲取該結構內容所需要用到的OID
- 使用程式碼或者其他的方式構建PDU,比如用snmp4j構建一個get請求型別的PDU(這個PDU是SMI描述的,BER編碼的,包含了要操作的OID)到網元,得到返回結果。
- 根據返回結果進行操作(可以通過getNext達到遍歷的效果),或者是把單純的資料資訊持久化起來用於觀察。
2. 設定網元引數
- 傳送set請求的PDU到網元達到設定網元某個引數的作用
3. 開發trap伺服器接收trap訊息
- 開發trap接收服務端,並在在網元端配置伺服器端地址,網元因為某個時間出發一個trap傳送到該服務端。
- 服務端記錄該trap訊息,用於資料分析
4. 開發一個網元模擬器
- 開發一個模擬器,自己作為網元被人管理,通常用於測試。因為網管系統對應的真是網元都是昂貴的硬體,不容易找到合適的測試環境。
為了進行網元開發,首先我們需要準備一下所用到的工具
MIB Browser
我上傳的一個免費版本:http://download.csdn.net/detail/three_man/7477903
官網下載地址:http://ireasoning.com/download.shtml
可以下載
iReasoning MIB Browser Free Personal Edition |
這個版本是個人版,沒有時間限制,但是有匯入的mib檔案數量的限制,不過很適合開發使用。
我自己寫了一個檔案可以來這裡上傳:http://download.csdn.net/detail/three_man/7477887
這裡對這個檔案進行簡單的說明。
檔案主要內容:
CMS-MIB DEFINITIONS ::= BEGIN
// 檔案描述開始
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, Counter32, Gauge32, Integer32, enterprises,
// 匯入基本的庫,特別注意enterprises.他的oid是1.3.6.1.4.1
convediaCorp OBJECT IDENTIFIER ::= { enterprises 7569 }
// 定義了一個節點,表示他是enterprises+ 7569,所以他的Oid是1.3.6.1.4.1.7569
nodeInfo OBJECT IDENTIFIER ::= { msMIBObjects 1 }
// 按照上面的類推,這個節點的Oid為.1.3.6.1.4.1.7569.1.2.1.1nodeLicensedPorts OBJECT-TYPE
SYNTAX Integer32 (0.. 65535)
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Future: The maximum number of ports licensed for this MS."
DEFVAL { 18000 }
::= { nodeInfo 1 }
// 表示從屬於nodeInfo的一個節點。其Oid為.1.3.6.1.4.1.7569.1.2.1.1.1.0可以通過get OID這樣的結構得到這個屬性的值,後續會說具體的方式。
這裡說一下SMI定義一個OBJECT-TYPE的結構。
- SYNTAX表示值的型別為Integer32,SMI本身定義了很少的基本型別和一個複合型別Sequences.
- MAX-ACCESS 訪問許可權,這個在MibBrowers中read-only表示為一個葉子,write表示為一個筆尖
alarmTable OBJECT IDENTIFIER ::= { msMIBObjects 23 }
alarmEventTable OBJECT-TYPE
SYNTAX SEQUENCE OF AlarmEventEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"A list of alarm status history entries."
::= { alarmTable 3 }
alarmEventEntry OBJECT-TYPE
SYNTAX AlarmEventEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"An entry in the Alarm Event Table."
INDEX { aleEventIndex }
::= { alarmEventTable 1 }
AlarmEventEntry ::=
SEQUENCE {
aleEventIndex Unsigned32,
aleSequenceID Unsigned32,
aleEventTime DateAndTime,
aleEventType EventType,
aleAlarmID Unsigned32,
aleAlarmText DisplayString,
aleAlarmSeverity AlarmSeverity,
aleInstanceID Unsigned32,
aleSlotNumber Unsigned32
}
aleEventIndex OBJECT-TYPE
SYNTAX Unsigned32 (1.. 2000 )
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"This object is used as a key attribute to
specify the row entry in this table."
::= { alarmEventEntry 1 }
aleSequenceID OBJECT-TYPE
SYNTAX Unsigned32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Unique sequential event identification number."
::= { alarmEventEntry 2 }
// 關鍵來了,這裡定義了一個Table,SMI中使用SEQUENCE 來定義複雜的結構,該結構可以看做是一個表,然後可以通過get,getNext來遍歷這張表中的內容。alarm001 NOTIFICATION-TYPE
OBJECTS { aleSequenceID, aleEventType, aleAlarmID, aleInstanceID,
aleAlarmText, aleAlarmSeverity, aleEventTime, aleSlotNumber }
STATUS current
DESCRIPTION
"External alarm 1 has been triggered. Text and severity
of this alarm are user-configurable. This alarm is
deactivated when the external contact is cleared."
--#SUMMARY "Alarm #001: %s. Slot: %d Event type: %d Severity: %d Instance: %d Sequence: #%d"
--#ARGUMENTS {4,7,1,5,3,0}
--#SEVERITY MAJOR
--#TIMEINDEX 10
--#STATE OPERATIONAL
::= { msTraps 11 }
// 這個注意NOTIFICATION-TYPE,其定義了一個Trap訊息,還定義了該trap訊息中的內容是使用了AlarmTable中的內容。
好了基本上一個網元在設計的時候都是先去申請OID節點,然後設計這個MIB檔案座位開發的標準。
然後我們使用MibBrowser匯入它。
下載安裝MibBrowser開啟它。
點選File->Load MIBS,選擇一個mib檔案開啟就會得到上面的樣子了。
我們再來看看其他功能。
1. get
- 在左樹中選擇要操作的節點,
- 最上面Address中輸入網元地址,這裡是筆者自己寫的一個模擬器,後面會把模擬器的程式碼奉上。
- Advanced可以設定SNMP的版本,一個用來身份驗證的Community和埠
- Operations選擇為Get,此外還能選擇為Getnext walk等。 點選Go.截圖沒截到
- 這樣就完成了一個請求操作,在後下的列表中會返回結果
2. getNext
與1相同,只是Operations設定為GetNext
3. walk
與1相同,Operations設定為walk,這個的返回結果會是一個列表。會預設輪詢呼叫getNext獲取整個Mib結構的所有值。
4, trapReceiver
開啟TrapReceiver. Tool->Trap Receiver.
按照5中的方式傳送Trap
然後看到結果:
輸入一些資訊,點選SendTrap,在4中看結果
好了基本就這麼多的功能了,因為SNMP本身就是很簡單的協議。這些功能也是我們之後在開發中要用程式碼實現的。
Linux SNMP服務
這個有可能需要安裝,也是比較好用的。主要的命令格式是:
snmpget -v2c -c CONV 10.85.134.194 .1.3.6.1.2.1.1.1.0
snmpwalk -v2c -c CONV 10.32.147.19:10161 1.3.6.1.4.1.7569.1.2.1.28.1
這個一看明瞭了吧, -v2c是版本, -c是Community, 然後是ip:port oid.
Linux上開發必備
SNMP4J
這個是下一篇要說的內容,是基於Java的開源的開發SNMP的包。下一篇具體說。
相關推薦
用snmp4j開發網管應用(一)
要開發網管應用,SNMP是必學的協議,這裡首先對SNMP進行一下簡單的介紹和想要開發SNMP協議的內容所需要用到的工具。 SNMP SNMP 協議分為了多個版本,V1太簡單,V2加入了一些驗證,V3最嚴謹,下面都是以V2進行說明 概念: ASN.1 高階資料描述語言,用於
用snmp4j開發網管應用(三) -- 簡單框架
工程的地址: https://github.com/wangzijian777/snmpTool 其中包含了一些通用的工具設計 1. XML中的隨機數生成語法解析器 在資料檔案中可以使用${randomString(5)}這樣的格式來定義一些測試資料,會被解析為一
用AngularJS開發下一代Web應用pdf
san ren 化工 body 下一代 安裝 關系 資源 元素 下載地址:網盤下載 內容簡介 · · · · · ·AngularJS是一款來自Google的前端JS框架,它的核心特性有:MVC、雙向數據綁定、指令和語義化標簽、模塊化工具、依賴註入、HTML模板,以及
用AngularJS開發下一代Web應用
AngularJS是一款來自Google的前端JS框架,它的核心特性有:MVC、雙向資料繫結、指令和語義化標籤、模組化工具、依賴注入、HTML模板,以及對常用工具的封裝,例如$http、$cookies、$location等。AngularJS框架的體積非常小,但是設計理念和功能卻非常強大,值得前端開發者深入
怎樣用beego開發服務端應用?(轉)
說明 beego是國內團隊開源的golang開發框架,是一個關注度和使用量都比價高的專案。 Quick Start 安裝 首先需要安裝beego和bee工具: $ go get -u github.com/astaxie/beego $ go get -u
為什麼人工智慧用Python開發?從沒有一篇文章講的這麼詳細!
https://baijiahao.baidu.com/s?id=1589653400264045732 為什麼人工智慧用Python? Python作為指令碼語言,執行速度沒有Java,C++快。 Python到底有啥優勢? 為什麼人工智慧的主流語言是Python? Py
用 Kotlin 開發 Android 專案是一種什麼樣的感受?
前言 從初學 Kotlin,到嘗試性的寫一點體驗程式碼,再到實驗性的做一些封裝工作,到最後摸爬滾打著寫了一個專案。不得不說過程中還是遇上了不少的問題,儘管有不少坑是源於我自己的選擇,比如使用了 anko 佈局放棄了 xml,但是總體來說,這門語言帶給我的驚喜是
案例:用vue開發網易雲音樂(已實現線上播放和下載)
效果如圖: 完整程式碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content
用PHP開發手機 APP應用API介面開發
這個帖子寫給不太瞭解PHP與API開發的人一、先簡單回答兩個問題:1、PHP 可以開發客戶端?答:不可以,因為PHP是指令碼語言,是負責完成 B/S架構 或 C/S架構 的S部分,即:服務端的開發。(別去糾結 GTK、WinBinder)2、為什麼選擇 PHP 作為開發服務端
032_《Delphi下用Intraweb開發WEB程式應用實戰(第二版)》
《Delphi下用Intraweb開發WEB程式應用實戰第二版》 Delphi 教程系列書籍 (032) 《Delphi下用Intraweb開發WEB程式應用實戰第二版》網友(邦)整理 EMail: [email protected] 下載地址: Pdf 作 者
用HTML開發Windows桌面應用程式2
接上次。 1.MFC,DHMTL開發 給大家演示一下,用MFC搞一個HTML應用程式。 關於如何用MFC搞DHTML,可以參見上一篇文章 貼程式碼 1.新增這個訊息對映 BEGIN_DISPATCH_MAP(CMFCApplication9Dlg, CDHtmlDialog)
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章節--SharePoint 2013 開發者工具 用SPD開發SharePoint應用程序
用戶 出現 pop 自己 ext 列表 ack popu track BEGINNING SHAREPOINT? 2013 DEVELOPMENT 第3章節--SharePoint 2013 開發者工具 用SPD開發SharePoint應用程序 非常多開
linux驅動開發之framebuffer應用編程實踐(一)
linux驅動開發之framebuffer驅動 1、framebuffer應用編程 (1)打開設備文件 (2)獲取設備信息 宏定義的命令在/linux/fb.h中 不可變信息FSCREENINFO,使用ioctl參數有FBIOGET_FSCREENINFO宏名,表示用ioctl從
用Html5/CSS3做Winform,一步一步教你搭建CefSharp開發環境(附JavaScript異步調用C#例子,及全部源代碼)上
轉載 界面設計 右鍵 異步 一個 由於 編寫 scrip 調用 本文為雞毛巾原創,原文地址:http://www.cnblogs.com/jimaojin/p/7077131.html,轉載請註明 CefSharp說白了就是Chromium瀏覽器的嵌入式核心,我們用此開發W
Android網絡應用之Socket(一)
指正 table 可靠 width 好文 [] 發送請求 響應 stub socket編程是網絡通信的一個基礎應用。不管是手機端還是PC端都須要socket技術來建立網絡通信。在本章小編主要從下面幾個方面來介紹socket的相關知識: 各自是“什麽是socket?
使用MyEclipse開發Java EE應用:用XDoclet創建EJB 2 Session Bean項目(三)
str 文件存儲 字段 des 管理 新版 enter ecif class MyEclipse限時秒殺!活動火熱開啟中>> 【MyEclipse最新版下載】 三、配置XDoclet支持的項目 默認情況下,MyEclipse EJB項目未配置使用XDocle
零基礎自學Python 3開發網絡爬蟲(二): 用到的數據結構簡介以及爬蟲Ver1.0 alpha
ket org doc link rtu 出隊 網站 pytho 支持 上一回, 我學會了 用偽代碼寫出爬蟲的主要框架; 用Python的urllib.request庫抓取指定url的頁面; 用Python的urllib.parse庫對普通字符串轉符合url的字符串.
Python全棧開發--網絡編程一
in use 5.6 hide 一對一 ket 版本 增刪改 smi click 一、軟件開發的架構 涉及到兩個程序之間通訊的應用大致可以分為兩種: 第一種是應用類:qq、微信、網盤這一類是屬於需要安裝的桌面應用 第二種是web類:比如百度、知乎、博客園等使用瀏覽器訪
網絡啟動一:之IPXE初識及其簡單應用
releases 依賴包 放置 art 配置 ces sdi ftw bootsect IPXE初識及其簡單應用 最近迷上了網絡啟動這回事,查詢了部分文檔,做了基本測試和總結,以供以後參考。 概述:PXE(preboot execute environm
網絡啟動一:之IPXE:企業應用
tftp initrd tex itl centos 6 util onf filename http 網絡啟動一:之IPXE:企業應用前幾天寫了IPXE簡單應用內容,今天詳細介紹使用IPXE在企業中的應用,部署Linux系統和Windows系統。操作步驟:一、搭建環境1.