1. 程式人生 > >用snmp4j開發網管應用(一)

用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.1
nodeLicensedPorts 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&#174; 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.