简单网络管理协议(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();
}
}
}