いよいよ org.snmp4j.CommandResponder を使ってトラップ受信を書く。
先日のつづきである。
import java.util.Iterator;
import java.util.Vector;
import org.snmp4j.CommandResponder;
import org.snmp4j.CommandResponderEvent;
import org.snmp4j.PDUv1;
import org.snmp4j.smi.VariableBinding;
/**
* トラップ受信 CommandResponder
*/
public class TrapResponder implements CommandResponder{
private TrapRecvMap traprecvmap;
public TrapResponder(){
this.traprecvmap = TrapRecvMap.bind();
}
/*
* @see org.snmp4j.CommandResponder#processPdu(org.snmp4j.CommandResponderEvent)
*/
@Override
public void processPdu(CommandResponderEvent event){
long recvTime = System.currentTimeMillis();
PDUv1 pduv1 = (PDUv1)event.getPDU();
String key = pduv1.getAgentAddress()+"_"+pduv1.getGenericTrap()+"_";
Integer trapno = null;
Vector vars = event.getPDU().getVariableBindings();
for(Iterator<?> it=vars.iterator();it.hasNext();){
VariableBinding v = (VariableBinding)it.next();
String oidstr = v.getOid().toString();
if (oidstr.equals("1.3.6.1.2.1.2.2.1.1")){
try{
trapno = v.getVariable().toInt();
break;
}catch(Exception e){
trapno = null;
}
}
}
if (trapno != null){
key += trapno.toString();
this.traprecvmap.put(key,new TrapInfo(
recvTime,pduv1.getAgentAddress().toString()
,pduv1.getGenericTrap(),trapno.intValue()));
}
}
}
------------------------------------------------------------
受信実行のサンプル
import java.io.IOException;
import jp.jsuite.snmp.SnmpTrapReceiveModule;
import jp.jsuite.snmp.SnmpTrapReceiver;
import test.recv4.TrapResponder;
import com.google.inject.Guice;
import com.google.inject.Injector;
// サンプル
public class RecvMain{
public static void main(String[] args){
// 受信Map 初期生成
TrapRecvMap traprecvmap = TrapRecvMap.bind();
// SNMP 受信
Injector injector = Guice.createInjector(
new SnmpTrapReceiveModule("111.11.11.111",2,TrapResponder.class));
SnmpTrapReceiver snmpTrapReceiver = injector.getInstance(SnmpTrapReceiver.class);
try{
// 受信開始
snmpTrapReceiver.start();
// SLEEP
try{Thread.sleep(60L * 9000L);}catch(InterruptedException e){}
// 受信終了
snmpTrapReceiver.end();
}catch(IOException e1){
e1.printStackTrace();
}finally{
traprecvmap.close();
}
}
}