研究了adventnet 的API接口应用,走了很多弯路,为了给大家做指导,特此记录。
首先,adventnet分为高版本和低版本的API。以trap为例:高版本Using High-Level API,是在低版本的基础上在封装了一层,对于底版本我必须知道agent的upd端口号和地址,而高版本不需要知道,它会自动分发到agent端。
[color=red][b]Using Low-Level API[/b][/color]
public class Sendv2cTrap
{
public static void main(String args[])
{
if( args.length == 0)
{
System.out.println("Usage : java SnmpSendTrap hostname");
System.exit(0);
}
// 需要发给哪个主机的IP地址
String remoteHost = args[0];
// Start SNMP API
SnmpAPI api = new SnmpAPI();
api.setDebug(true);
SnmpSession session = new SnmpSession(api);
// set remote Host
UDPProtocolOptions option = new UDPProtocolOptions(hostname);
SnmpPDU pdu = new SnmpPDU();
pdu.setProtocolOptions(option);
// 需要发给哪个主机的端口号
option.setRemotePort(8001);
//open the session
try
{
session.open();
}
catch (SnmpException e )
{
System.err.println("Error opening socket: "+e);
}
// Build SNMPv2c Trap PDU
pdu.setCommand(SnmpAPI.TRP2_REQ_MSG );
//参数一
SnmpVar var = null;
SnmpOID oid = new SnmpOID(".1.3.6.1.2.1.1.3.0");
try
{
//create SnmpVar instance
var = SnmpVar.createVariable(systemuptime, SnmpAPI.TIMETICKS);
}
catch(SnmpException e)
{
System.err.println("Cannot create variable: " + oid + " with value: " + systemuptime);
return;
}
//create varbind
SnmpVarBind varbind = new SnmpVarBind(oid,var);
// add variable binding
pdu.addVariableBinding(varbind);
//参数二
oid = new SnmpOID(".1.3.6.1.6.3.1.1.4.1.0");
try
{
//create SnmpVar instance
var = SnmpVar.createVariable(trapoidvalue,SnmpAPI.OBJID);
}
catch(SnmpException e)
{
System.err.println("Cannot create variable: " + oid + " with value: " + trapoidvalue);
return;
}
//create varbind
SnmpVarBind varbind = new SnmpVarBind(oid,var);
// add variable binding
pdu.addVariableBinding(varbind);
// send PDU
try
{
session.send(pdu);
}
catch (SnmpException e)
{
System.err.println("Sending PDU"+e.getMessage());
}
System.exit(0);
}
以上是低版本,一般来说,是我知道对方的IP地址在做trap,这种不适合我的需要,我目前是直接分发出去。所以用高版本。
[color=red][b]Using High-Level API[/b][/color]
public class Sendv2Trap {
private static final String OID = "1.3.6.1.2.33779.1";
public static void main(String args[]) {
// instantiate SNMP target bean
SnmpTarget target = new SnmpTarget();
//本机主机地址
target.settargetHost("hostname");
//端口号
target.setTargetPort(162);
//Set the SNMP version.
target.setSnmpVersion(target.VERSION2C);
//值为public
target.setCommunity(community);
//测试值
String values[] = {"testing"};
try
{
//创建snmpoid
SnmpOID snmpOID = new SnmpOID(OID);
//通过oid绑定参数和变量
SnmpVar snmpVar = SnmpVar.createVariable("test Trap", SnmpAPI.STRING);
//发送trap
this.eventAPI.snmpSendNotification(1000, snmpOID, new SnmpVar[] { snmpVar }); }
catch (Exception e)
{
System.err.println("Error Sending Trap: "+e.getMessage());
}
System.exit(0);
}
最后就是接收端接收了。
public class SnmpTrapd implements TrapListener {
public static void main(String args[]) {
// instantiate SNMP Trap Receiver bean
SnmpTrapReceiver trapreceiver = new SnmpTrapReceiver();
// set the port in which the trap is received
trapreceiver.setPort(162);
// register the listener for trap events
trapreceiver.addTrapListener(new SnmpTrapd());
System.out.println("Waiting to receive traps .......");
}
@Override
public void receivedTrap(TrapEvent trap) {
System.out.println("Got a trap from: " + trap.getRemoteHost());
// print PDU details
System.out.println(((SnmpTrapReceiver) trap.getSource()).getMibOperations().toString(trap.getTrapPDU()));
if (trap.getTrapPDU().getCommand() == SnmpAPI.TRP_REQ_MSG) {
com.adventnet.snmp.mibs.MibTrap trapDefn = trap.getTrapDefinition();
if (trapDefn != null) // print name and description
System.out.println("Trap Name: " + trapDefn.getName() + "\nDescr: " + trapDefn.getDescription());
}
}
}
今天的文章adventnet trap分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30787.html