您好,登錄后才能下訂單哦!
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是一個用Java來實現(xiàn)SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)協(xié)議的開源項目.它支持以命令行的形式進行管理與響應(yīng)。SNMP4J是純面向?qū)ο笤O(shè)計與SNMP++(用C++實現(xiàn)SNMPv1/v2c/v3)相類似。
支持MD5和SHA驗證,DES,3DES,AES128、AES192和AES256加密的SNMPv3。
支持MPv1,MPv2C和MPv3,帶執(zhí)行的可阻塞的信息處理模塊。
全部PDU格式。
可阻塞的傳輸拓撲。支持UPD、TCP、TLS 。
可阻塞的超時模塊。
同步和異步請求。
命令發(fā)生器以及命令應(yīng)答器的支持。
基于Apache license的開源免費。
JAVA 1.4.1或更高版本(2.0或更高版本需要jdk1.6及以上的支持)。
基于LOG4J記錄日志。
使用GETBULK實現(xiàn)Row-based的有效的異步表格獲取。
支持多線程。
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%
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 MIB可以分為兩大類,一類稱之為組如下圖的system組,有查詢、修改操作,
與之相映射的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 …….. 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開發(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)存等 | 無 |
免責(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)容。