您好,登錄后才能下訂單哦!
SNMP4J是一個用Java來實現SNMP(簡單網絡管理協議)協議的開源項目.它支持以命令行的形式進行管理與響應。Object SNMP是一個面向對象的SNMP開發組件,與關系數據庫流行的O-R Mapping技術類似,實現了Object到SNMP MIB的操作映射(簡稱O-M Mapping)。使用SNMP4J與ObjectSNMP開發類似于使用原生JDBC開發與Hibernate框架。
SNMP4J是一個用Java來實現SNMP(簡單網絡管理協議)協議的開源項目.它支持以命令行的形式進行管理與響應。SNMP4J是純面向對象設計與SNMP++(用C++實現SNMPv1/v2c/v3)相類似。
支持MD5和SHA驗證,DES,3DES,AES128、AES192和AES256加密的SNMPv3。
支持MPv1,MPv2C和MPv3,帶執行的可阻塞的信息處理模塊。
全部PDU格式。
可阻塞的傳輸拓撲。支持UPD、TCP、TLS 。
可阻塞的超時模塊。
同步和異步請求。
命令發生器以及命令應答器的支持。
基于Apache license的開源免費。
JAVA 1.4.1或更高版本(2.0或更高版本需要jdk1.6及以上的支持)。
基于LOG4J記錄日志。
使用GETBULK實現Row-based的有效的異步表格獲取。
支持多線程。
Object SNMP(Object Simple Network Management Protocol)是一個面向對象的SNMP開發組件,與關系數據庫流行的O-R Mapping技術類似,實現了Object到SNMP MIB的操作映射(簡稱O-M Mapping),系統提供了Java/SNMP網關、RMI/SNMP網關 、Web Service/SNMP網關服務。開發者無需理解SNMP協議和MIB細節,只需要定義普通數據對象,然后將數據對象按添加、刪除、修改、查詢等模式提交給網關即可。Object SNMP網關會自動將數據對象按開發者的期望發送到SNMP設備,并返回用戶需要的數據對象。Object SNMP提供諸如分布式代理SNMP網關、 網絡拓撲發現、物理拓撲發現、網絡自動搜索發現 、設備連接關系發現、設備類型發現、網絡漫游搜索、以及定義好的可管理各種設備的MIB數據等高級功能。
ObjectSNMP提供四種網關API模型,滿足絕大多數開發者的需求。所有網關的API保持一致,都提供了基于數據對象添加、刪除、修改、查詢等服務;并可以隨意切換各種網關模式,保持API對用戶不變。
1.O-M Mapping映射框架
參考數據庫領域流行的O-RMapping技術,實現SNMP領域的Object-MIB映射框架,自動翻譯MIB和OID語法、SNMP命令和網絡操作,徹底告別Socket、PDU、UDP、SNMPGet等方式的編程模式,開發人員僅需定義一個與MIB數據相對應的普通數據對象。然后通過各種網關提交數據對象,即可完成對SNMP的復雜訪問。
2.Java/SNMP網關
使用者的程序和ObjectSNMP在同一個Java進程內,使用者定義普通Java數據對象,然后通過Java API訪問ObjectSNMP網關。
3.Java RMI/SNMP網關
使用者的程序和ObjectSNMP在不同的Java進程內,或在不同的機器上。使用者定義普通Java數據對象,然后通過RMI Java API訪問ObjectSNMP網關。
4.Web Service/SNMP網關
使用者可以為PHP、C++、.NET、Java、Flex、JavaScrip等支持Web Service技術的其他程序,通過在Web環境中,訪問ObjectSNMP網關。Web Servcie/SNMP網關支持任意兼容servlet的Web容器。
5.Proxy/SNMP透明網關
為私網穿透、分布式部署SNMP網關、SNMP網關負載均衡、主/從兩級SNMP管理 等場景提供了透明的SNMP網關服務。Proxy網關可以采用Java、RMI、Web Service任意模式,并且完全對用戶透明,就如同只有一個網關一樣。
6.一致的API服務
所有的網關的API保持一致,都提供了基于數據對象添加、刪除、修改、查詢等服務;并可以隨意切換各種網關模式,保持API對用戶不變。
7.SNMP Trap接收服務
內置SNMP Trap接收服務器,可以接收公共和私有SNMP Trap消息。并自動將原始Trap PDU包解析成Java Trap消息對象。為了簡化Trap通知模式的編程開發,ObjectSNMP將被動接收的Trap消息機制映射成為主動獲取Java Trap消息對象的普通編程模式。
8.網管集成
ObjectSNMP依托底層O-M框架和網關技術,針對諸如故障管理、性能監控管理、故障監控、配置管理、業務管理、網絡安全管理等SNMP網管功能,提供了最為便捷的支持。
9.支持私有MIB文件
產品可以加載各種廠商的私有MIB文件,加載私有MIB文件后,自動解析MIB文件的語法。
10.網絡自動發現功能
采用全新的技術:即支持單一Cisco、華為網絡,也支持各種廠商設備混合網絡。支持模糊連接定位,在數據不全或設備缺失的情況下,盡可能發現連接關系。可在任意的網絡環境中工作,不需要用戶對網絡做任何假設。
11.SNMP數據采集服務
ObjectSNMP提供如下常用數據采集服務,使用者可直接使用:系統類MIB描述、IP網絡類MIB描述、交換機MIB描述、硬件設施類MIB描述、軟件類MIB描述、Java類MIB描述。
12.自動Java代碼生成技術
提供了Java數據對象代碼的自動生成技術,進一步簡化SNMP開發工作。
13.SNMP MIB數據瀏覽器
可單獨使用,也可集成在程序中使用SNMP數據瀏覽器,便于開發和調試。
14.優秀的性能表現
單線程1萬個SNMP對象(7萬個SNMP OID數據)獲取總時間<=5秒
多線程并發1萬個SNMP對象獲取總時間<=2秒
連續30天多線程并發獲取SNMP數據,內存波動正負0.3M
1千萬次SNMP對象獲取操作,在多線程并發環境下,正確率100%
1)創建Target(Target代表遠程設備或者遠程實體),包括設備地址,SNMP端口,snmp團體字,SNMP版本,超時時間,重試次數等信息。
2)創建PDU(代表管理端同Target通信的數據),在PDU中增加要獲取的OID值,設置訪問的方式。
3)創建SNMP(代表著管理者,作用是通信的具體實行者)
4)向Agent發送PDU,并接收Response響應
5)解析Resoponse響應。
// 設置 target CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public")); Address targetAddress = GenericAddress.parse("udp:127.0.0.1/161"); target.setAddress(targetAddress);//設置目標設備地址、端口 target.setRetries(2); // 通信不成功時的重試次數 target.setTimeout(1500);// 超時時間 target.setVersion(SnmpConstants.version1);//設置版本 // 創建 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獲取數據:
1)創建SNMPTarget,包括設備地址,SNMP端口,snmp團體字,SNMP版本,超時時間,重試次數等信息。
2)獲取SNMPAPI,根據OID獲取SNMP數據。
//封裝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);
結論:對于SNMP簡單數據的獲取,即根據單個OID獲取相應信息,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表中所有數據 List list= snmpapi. getAllTableData(MibOspfStubAreaEntry.class, target); //在MibOspfStubAreaEntry 表中添加一行數據 MibOspfStubAreaEntry ospf = new MibOspfStubAreaEntry(); ospf.setOspfStubTOS(3); ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryAdd); //設置snmp rowstatus的值為添加。 ospf.setOspfStubMetricType(2); snmpapi.addTableRow(ospf, target); //表中刪除一行數據 MibOspfStubAreaEntry ospf = new MibOspfStubAreaEntry();//設置snmp rowstatus的值為刪除語義 ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryDel); snmpapi.delTableRow(ospf, target); //修改MibOspfStubAreaEntry mib表中一行數據 MibOspfStubAreaEntry ospf = new MibOspfStubAreaEntry(); ospf.setOspfStubAreaId("192.168.9.0"); ospf.setOspfStubTOS(3); ospf.setOspfStubStatus(SNMPAPI.RowStatusEntryActive); //設置snmp rowstatus的值為激活語義。 ospf.setOspfStubMetric(3); ospf.setOspfStubMetricType(3); snmpapi.update(ospf, target);
可以看出通過ObjectSNMP操作數據極其方便簡單,相比于SNMP4J從易用性和功能性來說得到了很大的提高,而且通過對象的方式對SNMP進行操作,更符合用戶的使用習慣,且屏蔽掉了SNMP4J中的PDU、ScopedPDU類、TransportMapping等,學習成本降低了很多。
項目 | 使用ObjectSNMP開發 | SNMP4J |
軟件架構 | 底層實現對SNMP協議的封裝,上層提供基于對象的網關服務和各種高級服務。 | 實現對SNMP協議的原始封裝 |
開發技能要求 | 僅需了解SNMP概念即可開發,并提供對象代碼自動生成工具 | 需要對Socket、SNMP數據類型等有開發級的掌握。 |
開發效率 | 對象級的上層抽象操作。代碼量僅有傳統模式的10% | 大量的SNMP協議層操作代碼 |
開發時間 | 在SNMP模塊開發和設備聯調上花費的時間僅有傳統模式的20% | 需要專人負責SNMP模塊的開發和后期維護 |
軟件性能 | 已通過基準性能驗證,新定義的數據對象直接在網關通道上傳遞 | 需要大量的調優、測試、驗證來保證 |
軟件模式 | 有統一的對象模式和網關模式,與整體軟件的對象風格保持一致 | 無,需要開發人員重新建立 |
網關功能 | 同時支持Java、RMI、Web Service、Proxy等多種網關 | 無 |
高級服務 | 全新技術的網絡拓撲自動發現和網絡資源發現 | 無 |
預定義MIB對象 | 提供多種內置MIB采集服務,如網絡接口、流量、數據包、IP、CPU、磁盤、內存等 | 無 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。