SNMP監控開啟snmp服務的裝置
阿新 • • 發佈:2019-01-04
簡單網路管理協議(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();
}
}
}