1. 程式人生 > >SNMP監控開啟snmp服務的裝置

SNMP監控開啟snmp服務的裝置

      簡單網路管理協議(SNMP),由一組網路管理的標準組成,包含一個應用層協議(application layer protocol)、資料庫模型(database schema)和一組資源物件。該協議能夠支援網路管理系統,用以監測連線到網路上的裝置是否有任何引起管理上關注的情況。該協議是網際網路工程工作小組(IETF,Internet Engineering Task Force)定義的internet協議簇的一部分。SNMP的目標是管理網際網路Internet上眾多廠家生產的軟硬體平臺,因此SNMP受Internet標準網路管理框架的影響也很大。SNMP已經出到第三個版本的協議,其功能較以前已經大大地加強和改進了。

下面是通過java來實現snmp監控管理網路裝置:


import java.io.IOException;   
import java.util.Vector;   
import org.snmp4j.CommunityTarget;   
import org.snmp4j.PDU;   
import org.snmp4j.Snmp;   
import org.snmp4j.TransportMapping;   
import org.snmp4j.event.ResponseEvent;   
import org.snmp4j.smi.Address;   
import
org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID; import org.snmp4j.smi.OctetString; import org.snmp4j.smi.VariableBinding; import org.snmp4j.transport.DefaultUdpTransportMapping; public class SNMP_oper{ public static void main(String[] args) { try
{ //通過url的161 來開啟一個address Address targetAddress = GenericAddress.parse("udp:192.168.31.18/161"); TransportMapping transport = new DefaultUdpTransportMapping(); Snmp snmp = new Snmp(transport); transport.listen();//監聽 CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public"));//設定共同體名 target.setAddress(targetAddress);//設定目標Agent地址 target.setRetries(2);//重試次數 target.setTimeout(5000);//超時設定 target.setVersion(1);//版本 PDU request = new PDU(); request.setType(PDU.GET);//操作型別GET /* * 被監控端如果未配置OID的話。監控端將無法獲取資訊。 * 配置目錄在snmp根目錄下的mid資料夾中。 * */ request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1.1.0")));//系統基本資訊 request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1.2.0"))); request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1.3.0")));//系統時間 request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1.4.0")));//系統聯絡人 request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1.5.0")));//系統名 request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1.6.0"))); request.add(new VariableBinding(new OID(".1.3.6.1.2.1.1.7.0"))); request.add(new VariableBinding(new OID(".1.3.6.1.4.1.2021.11.9.0")));//使用者CPU百分比 System.out.println("Request UDP:" + request); ResponseEvent respEvt = snmp.send(request, target); //讀取得到的繫結變數 if (respEvt != null && respEvt.getResponse()!=null) { Vector<? extends VariableBinding> revBindings = respEvt.getResponse().getVariableBindings(); for (int i=0; i<revBindings.size();i++) { VariableBinding vbs = revBindings.elementAt(i); System.out.println(vbs.getOid()+":"+vbs.getVariable()); } } } catch (IOException e) { e.printStackTrace(); } } }