百度百科
SNMP 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。 SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)网络管理系统获知网络出现问题。
开发背景
提供服务的系统(L),需要向使用方(C)上报“软件存活”、“数据库连接”、“任务执行异常”等报警信息。选择使用snmp(简单网络管理协议)来实现这个需求,使用java语言开发,第三方包snmp4j.jar包。
开发步骤
- 封装一个snmp上报的工具类,demo代码如下:
package com.dayang.leovideo.utils.snmp;
import org.snmp4j.*;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.*;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class SnmpUtil {
private Snmp snmp = null;
private Address targetAddress = null;
private int snmpVersion;
public void initComm(String ip, Integer port,int version) throws IOException {
snmpVersion = version;
// targetAddress = GenericAddress.parse("udp:127.0.0.1/163");
targetAddress = GenericAddress.parse("udp:"+ip+"/"+port);
TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
transport.listen();
}
public void sendPDU(List<VariableBinding> variableBindingList, String communityName) throws IOException {
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString(communityName));
target.setAddress(targetAddress);
target.setRetries(2);
target.setTimeout(1000 * 5);
target.setVersion(SnmpConstants.version2c);
PDU pdu;
if(snmpVersion == 2){
//snmp版本1
pdu = new PDUv1();
pdu.setType(PDU.V1TRAP);
}else{
//snmp版本2
pdu = new PDU();
pdu.setType(PDU.TRAP);
}
for(VariableBinding variableBinding : variableBindingList){
pdu.add(variableBinding);
}
snmp.send(pdu, target);
}
public static void main(String[] args) {
try {
SnmpUtil util = new SnmpUtil();
util.initComm("192.168.3.261", 163,1);
List variableBindingList = new ArrayList();
variableBindingList.add(new VariableBinding(new OID("1.3534.16.1.6.2"),new OctetString("snmp send Message")));
util.sendPDU(variableBindingList,"BaiBai");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 安装snmp接收工具:
安装了两个工具(iReasoning MIB browser setup.exe ; MG-SOFT+MIB+Browser+v10b)。
安装了IReasoning,在菜单栏找到trap receiver
启动后可以看到以下展示窗口(如果端口冲突,可以在设置中修改)
- 运行代码,查看接收的信息:
运行demo代码(红框中参数为trap receiver的ip和端口,snmp的版本1/2)