溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SNMP4J與ObjectSNMP對比分析之我見

發(fā)布時間:2020-07-25 06:02:53 來源:網(wǎng)絡(luò) 閱讀:2033 作者:SugarNMS 欄目:開發(fā)技術(shù)

  SNMP4J是一個用Java來實現(xiàn)SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)協(xié)議的開源項目.它支持以命令行的形式進行管理與響應(yīng)。Object SNMP是一個面向?qū)ο蟮腟NMP開發(fā)組件,與關(guān)系數(shù)據(jù)庫流行的O-R Mapping技術(shù)類似,實現(xiàn)了Object到SNMP MIB的操作映射(簡稱O-M Mapping)。使用SNMP4J與ObjectSNMP開發(fā)類似于使用原生JDBC開發(fā)與Hibernate框架。

SNMP4J介紹

  SNMP4J是一個用Java來實現(xiàn)SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)協(xié)議的開源項目.它支持以命令行的形式進行管理與響應(yīng)。SNMP4J是純面向?qū)ο笤O(shè)計與SNMP++(用C++實現(xiàn)SNMPv1/v2c/v3)相類似。

  1. 支持MD5和SHA驗證,DES,3DES,AES128、AES192和AES256加密的SNMPv3。

  2. 支持MPv1,MPv2C和MPv3,帶執(zhí)行的可阻塞的信息處理模塊。

  3. 全部PDU格式。

  4. 可阻塞的傳輸拓撲。支持UPD、TCP、TLS 。

  5. 可阻塞的超時模塊。

  6. 同步和異步請求。

  7. 命令發(fā)生器以及命令應(yīng)答器的支持。

  8. 基于Apache license的開源免費。

  9. JAVA 1.4.1或更高版本(2.0或更高版本需要jdk1.6及以上的支持)。

  10. 基于LOG4J記錄日志。

  11. 使用GETBULK實現(xiàn)Row-based的有效的異步表格獲取。

  12. 支持多線程。

 

ObjectSNMP介紹

  Object SNMP(Object Simple Network Management Protocol)是一個面向?qū)ο蟮腟NMP開發(fā)組件,與關(guān)系數(shù)據(jù)庫流行的O-R Mapping技術(shù)類似,實現(xiàn)了Object到SNMP MIB的操作映射(簡稱O-M Mapping),系統(tǒng)提供了Java/SNMP網(wǎng)關(guān)、RMI/SNMP網(wǎng)關(guān) 、Web Service/SNMP網(wǎng)關(guān)服務(wù)。開發(fā)者無需理解SNMP協(xié)議和MIB細節(jié),只需要定義普通數(shù)據(jù)對象,然后將數(shù)據(jù)對象按添加、刪除、修改、查詢等模式提交給網(wǎng)關(guān)即可。Object SNMP網(wǎng)關(guān)會自動將數(shù)據(jù)對象按開發(fā)者的期望發(fā)送到SNMP設(shè)備,并返回用戶需要的數(shù)據(jù)對象。Object SNMP提供諸如分布式代理SNMP網(wǎng)關(guān)、 網(wǎng)絡(luò)拓撲發(fā)現(xiàn)、物理拓撲發(fā)現(xiàn)、網(wǎng)絡(luò)自動搜索發(fā)現(xiàn) 、設(shè)備連接關(guān)系發(fā)現(xiàn)、設(shè)備類型發(fā)現(xiàn)、網(wǎng)絡(luò)漫游搜索、以及定義好的可管理各種設(shè)備的MIB數(shù)據(jù)等高級功能。

  ObjectSNMP提供四種網(wǎng)關(guān)API模型,滿足絕大多數(shù)開發(fā)者的需求。所有網(wǎng)關(guān)的API保持一致,都提供了基于數(shù)據(jù)對象添加、刪除、修改、查詢等服務(wù);并可以隨意切換各種網(wǎng)關(guān)模式,保持API對用戶不變。

1.O-M Mapping映射框架

  參考數(shù)據(jù)庫領(lǐng)域流行的O-RMapping技術(shù),實現(xiàn)SNMP領(lǐng)域的Object-MIB映射框架,自動翻譯MIB和OID語法、SNMP命令和網(wǎng)絡(luò)操作,徹底告別Socket、PDU、UDP、SNMPGet等方式的編程模式,開發(fā)人員僅需定義一個與MIB數(shù)據(jù)相對應(yīng)的普通數(shù)據(jù)對象。然后通過各種網(wǎng)關(guān)提交數(shù)據(jù)對象,即可完成對SNMP的復(fù)雜訪問。

2.Java/SNMP網(wǎng)關(guān)

  使用者的程序和ObjectSNMP在同一個Java進程內(nèi),使用者定義普通Java數(shù)據(jù)對象,然后通過Java API訪問ObjectSNMP網(wǎng)關(guān)。

3.Java RMI/SNMP網(wǎng)關(guān)

  使用者的程序和ObjectSNMP在不同的Java進程內(nèi),或在不同的機器上。使用者定義普通Java數(shù)據(jù)對象,然后通過RMI Java API訪問ObjectSNMP網(wǎng)關(guān)。

4.Web Service/SNMP網(wǎng)關(guān)

  使用者可以為PHP、C++、.NET、Java、Flex、JavaScrip等支持Web Service技術(shù)的其他程序,通過在Web環(huán)境中,訪問ObjectSNMP網(wǎng)關(guān)。Web Servcie/SNMP網(wǎng)關(guān)支持任意兼容servlet的Web容器。

5.Proxy/SNMP透明網(wǎng)關(guān)

  為私網(wǎng)穿透、分布式部署SNMP網(wǎng)關(guān)、SNMP網(wǎng)關(guān)負載均衡、主/從兩級SNMP管理 等場景提供了透明的SNMP網(wǎng)關(guān)服務(wù)。Proxy網(wǎng)關(guān)可以采用Java、RMI、Web Service任意模式,并且完全對用戶透明,就如同只有一個網(wǎng)關(guān)一樣。

6.一致的API服務(wù)

  所有的網(wǎng)關(guān)的API保持一致,都提供了基于數(shù)據(jù)對象添加、刪除、修改、查詢等服務(wù);并可以隨意切換各種網(wǎng)關(guān)模式,保持API對用戶不變。

7.SNMP Trap接收服務(wù)

  內(nèi)置SNMP Trap接收服務(wù)器,可以接收公共和私有SNMP Trap消息。并自動將原始Trap PDU包解析成Java Trap消息對象。為了簡化Trap通知模式的編程開發(fā),ObjectSNMP將被動接收的Trap消息機制映射成為主動獲取Java Trap消息對象的普通編程模式。

8.網(wǎng)管集成

  ObjectSNMP依托底層O-M框架和網(wǎng)關(guān)技術(shù),針對諸如故障管理、性能監(jiān)控管理、故障監(jiān)控、配置管理、業(yè)務(wù)管理、網(wǎng)絡(luò)安全管理等SNMP網(wǎng)管功能,提供了最為便捷的支持。

9.支持私有MIB文件

  產(chǎn)品可以加載各種廠商的私有MIB文件,加載私有MIB文件后,自動解析MIB文件的語法。

10.網(wǎng)絡(luò)自動發(fā)現(xiàn)功能

  采用全新的技術(shù):即支持單一Cisco、華為網(wǎng)絡(luò),也支持各種廠商設(shè)備混合網(wǎng)絡(luò)。支持模糊連接定位,在數(shù)據(jù)不全或設(shè)備缺失的情況下,盡可能發(fā)現(xiàn)連接關(guān)系??稍谌我獾木W(wǎng)絡(luò)環(huán)境中工作,不需要用戶對網(wǎng)絡(luò)做任何假設(shè)。

11.SNMP數(shù)據(jù)采集服務(wù)

  ObjectSNMP提供如下常用數(shù)據(jù)采集服務(wù),使用者可直接使用:系統(tǒng)類MIB描述、IP網(wǎng)絡(luò)類MIB描述、交換機MIB描述、硬件設(shè)施類MIB描述、軟件類MIB描述、Java類MIB描述。

12.自動Java代碼生成技術(shù)

  提供了Java數(shù)據(jù)對象代碼的自動生成技術(shù),進一步簡化SNMP開發(fā)工作。

13.SNMP MIB數(shù)據(jù)瀏覽器

  可單獨使用,也可集成在程序中使用SNMP數(shù)據(jù)瀏覽器,便于開發(fā)和調(diào)試。

14.優(yōu)秀的性能表現(xiàn)

  • 單線程1萬個SNMP對象(7萬個SNMP OID數(shù)據(jù))獲取總時間<=5秒

  • 多線程并發(fā)1萬個SNMP對象獲取總時間<=2秒

  • 連續(xù)30天多線程并發(fā)獲取SNMP數(shù)據(jù),內(nèi)存波動正負0.3M

  • 1千萬次SNMP對象獲取操作,在多線程并發(fā)環(huán)境下,正確率100%

SNMP4J與ObjectSNMP實例對比

(一)獲取snmp簡單基本數(shù)據(jù)

1.Snmp4j步驟:

1)創(chuàng)建Target(Target代表遠程設(shè)備或者遠程實體),包括設(shè)備地址,SNMP端口,snmp團體字,SNMP版本,超時時間,重試次數(shù)等信息。

2)創(chuàng)建PDU(代表管理端同Target通信的數(shù)據(jù)),在PDU中增加要獲取的OID值,設(shè)置訪問的方式。

3)創(chuàng)建SNMP(代表著管理者,作用是通信的具體實行者)

4)向Agent發(fā)送PDU,并接收Response響應(yīng)

5)解析Resoponse響應(yīng)。

// 設(shè)置 target
   CommunityTarget target = new CommunityTarget();
   target.setCommunity(new OctetString("public"));
   Address targetAddress = GenericAddress.parse("udp:127.0.0.1/161");
   target.setAddress(targetAddress);//設(shè)置目標設(shè)備地址、端口
   target.setRetries(2); // 通信不成功時的重試次數(shù)
   target.setTimeout(1500);// 超時時間
   target.setVersion(SnmpConstants.version1);//設(shè)置版本

   // 創(chuàng)建 PDU
   PDU pdu = new PDU();
   pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 5, 0 })));
   pdu.setType(PDU.GET);// MIB的訪問方式
   
   TransportMapping transport = new DefaultUdpTransportMapping();
   Snmp snmp = new Snmp(transport);
   ResponseEvent respEvnt = snmp.send(pdu, target);// MIB的訪問方式

   // 解析Response
   if (respEvnt != null && respEvnt.getResponse() != null) {
		Vector<VariableBinding> recVBs = respEvnt.getResponse().getVariableBindings();
          for (int i = 0; i < recVBs.size(); i++) {
                 VariableBinding recVB = recVBs.elementAt(i);
                 System.out.println(recVB.getOid() + " : " + recVB.getVariable());
          }
   }

2.使用ObjectSNMP獲取數(shù)據(jù):

1)創(chuàng)建SNMPTarget,包括設(shè)備地址,SNMP端口,snmp團體字,SNMP版本,超時時間,重試次數(shù)等信息。

2)獲取SNMPAPI,根據(jù)OID獲取SNMP數(shù)據(jù)。

  //封裝Target
   SNMPTarget target = new SNMPTarget();
   target.nodeIP="127.0.0.1";
   target.port=161;
   target.readCommunity="public";
   target.snmpVersion = target.VERSION2C;
   
   //獲取信息
   String result = SNMPFactory.getSNMPAPI().getOIDValue("1, 3, 6, 1, 2, 1, 1, 5, 0",target);

 結(jié)論:對于SNMP簡單數(shù)據(jù)的獲取,即根據(jù)單個OID獲取相應(yīng)信息,ObjectSNMP更為簡單方便。

(二)操作snmp表、組數(shù)據(jù)

  所有的SNMP MIB可以分為兩大類,一類稱之為組如下圖的system組,有查詢、修改操作,

 SNMP4J與ObjectSNMP對比分析之我見     SNMP4J與ObjectSNMP對比分析之我見 

與之相映射的JAVA對象分別是:

public class MibSystem implements com.zhtelecom.common.snmp.OMMappingInfo
{
    private String sysDescr;
    private String sysObjectID;
    private long sysUpTime;
    private String sysContact;
    private String sysName;
    private String sysLocation;
    private int sysServices;
		get/set &hellip;&hellip;..
    public String getMappingOID()  //告訴要映射system組的OID
    {
        return "1.3.6.1.2.1.1";  //system組的OID
    }
}

Public class MibOspfStubAreaEntry implements com.zhtelecom.common.snmp.OMMappingInfo
{
    private String ospfStubAreaId;
    private int ospfStubTOS;
    private int ospfStubMetric;
    private int ospfStubStatus;
    private int ospfStubMetricType;

    public String getMappingOID()
    {
        return "1.3.6.1.2.1.14.3.1"; // ospfStubAreaEntry的OID
    }
}

 

//獲取MibOspfStubAreaEntry表中所有數(shù)據(jù)
List list= snmpapi. getAllTableData(MibOspfStubAreaEntry.class, target);
//在MibOspfStubAreaEntry 表中添加一行數(shù)據(jù)
MibOspfStubAreaEntry ospf = new MibOspfStubAreaEntry();
ospf.setOspfStubTOS(3);
ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryAdd); //設(shè)置snmp rowstatus的值為添加。
ospf.setOspfStubMetricType(2);
snmpapi.addTableRow(ospf, target);
//表中刪除一行數(shù)據(jù)
MibOspfStubAreaEntry ospf = new MibOspfStubAreaEntry();//設(shè)置snmp rowstatus的值為刪除語義
ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryDel);
snmpapi.delTableRow(ospf, target);

//修改MibOspfStubAreaEntry mib表中一行數(shù)據(jù)
MibOspfStubAreaEntry ospf = new MibOspfStubAreaEntry();
ospf.setOspfStubAreaId("192.168.9.0");
ospf.setOspfStubTOS(3);
ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryActive); //設(shè)置snmp rowstatus的值為激活語義。
ospf.setOspfStubMetric(3);
ospf.setOspfStubMetricType(3);
snmpapi.update(ospf, target);

可以看出通過ObjectSNMP操作數(shù)據(jù)極其方便簡單,相比于SNMP4J從易用性和功能性來說得到了很大的提高,而且通過對象的方式對SNMP進行操作,更符合用戶的使用習(xí)慣,且屏蔽掉了SNMP4J中的PDU、ScopedPDU類、TransportMapping等,學(xué)習(xí)成本降低了很多。

(三)基于ObjectSNMP與SNMP開發(fā)對比

項目

使用ObjectSNMP開發(fā)

SNMP4J

軟件架構(gòu)

底層實現(xiàn)對SNMP協(xié)議的封裝,上層提供基于對象的網(wǎng)關(guān)服務(wù)和各種高級服務(wù)。

實現(xiàn)對SNMP協(xié)議的原始封裝

開發(fā)技能要求

僅需了解SNMP概念即可開發(fā),并提供對象代碼自動生成工具

需要對Socket、SNMP數(shù)據(jù)類型等有開發(fā)級的掌握。

開發(fā)效率

對象級的上層抽象操作。代碼量僅有傳統(tǒng)模式的10%

大量的SNMP協(xié)議層操作代碼

開發(fā)時間

在SNMP模塊開發(fā)和設(shè)備聯(lián)調(diào)上花費的時間僅有傳統(tǒng)模式的20%

需要專人負責(zé)SNMP模塊的開發(fā)和后期維護

軟件性能

已通過基準性能驗證,新定義的數(shù)據(jù)對象直接在網(wǎng)關(guān)通道上傳遞

需要大量的調(diào)優(yōu)、測試、驗證來保證

軟件模式

有統(tǒng)一的對象模式和網(wǎng)關(guān)模式,與整體軟件的對象風(fēng)格保持一致

無,需要開發(fā)人員重新建立

網(wǎng)關(guān)功能

同時支持Java、RMI、Web Service、Proxy等多種網(wǎng)關(guān)

高級服務(wù)

全新技術(shù)的網(wǎng)絡(luò)拓撲自動發(fā)現(xiàn)和網(wǎng)絡(luò)資源發(fā)現(xiàn)

預(yù)定義MIB對象

提供多種內(nèi)置MIB采集服務(wù),如網(wǎng)絡(luò)接口、流量、數(shù)據(jù)包、IP、CPU、磁盤、內(nèi)存等

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI