2013-02-20 74 views
0

我使用org.snmp4j中的snmp4j ver 1.10.1,这是我的陷阱接收器代码,用于从snmp陷阱捕获数据。SNMP中缺少值

public class TrapReceiver extends Thread implements CommandResponder { 

//@Autowired 
private CarService carService; 
List<PDUv1> listPdu = new ArrayList<PDUv1>(); 
List<PDUv1> temp = new ArrayList<PDUv1>(); 
String message = ""; 
int totReceivedTrap = 0; 

public TrapReceiver(CarService carService){ 
    this.carService = carService; 
} 

public synchronized void processPdu(CommandResponderEvent cmdRespEvent) { 
    PDUv1 pdu = (PDUv1) cmdRespEvent.getPDU(); 
    if (pdu != null) { 
     System.out.println(pdu.getVariableBindings().toString());   
    } 
    totReceivedTrap++; 
    System.out.println("total received trap "+totReceivedTrap); 
} 

public void run() { 
    while (true) { 
     try { 
      this.listen(new UdpAddress("192.168.1.5/162")); //alamat PDU akan listen 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public synchronized void listen(TransportIpAddress address) throws IOException { 
    AbstractTransportMapping transport; 
    if (address instanceof TcpAddress) { 
     transport = new DefaultTcpTransportMapping((TcpAddress) address); 
    } else { 
     transport = new DefaultUdpTransportMapping((UdpAddress) address); 
    } 

    ThreadPool threadPool = ThreadPool.create("DispatcherPool", 10); 
    MessageDispatcher mDispathcher = new MultiThreadedMessageDispatcher(
      threadPool, new MessageDispatcherImpl()); 

    // add message processing models 
    mDispathcher.addMessageProcessingModel(new MPv1()); 
    mDispathcher.addMessageProcessingModel(new MPv2c()); 

    // add all security protocols 
    SecurityProtocols.getInstance().addDefaultProtocols(); 
    SecurityProtocols.getInstance().addPrivacyProtocol(new Priv3DES()); 

    // Create Target 
    CommunityTarget target = new CommunityTarget(); 
    target.setCommunity(new OctetString("public")); 

    Snmp snmp = new Snmp(mDispathcher, transport); 
    snmp.addCommandResponder(this); 

    transport.listen(); 
    message ="Listening on " + address; 
    System.out.println(message); 

    try { 
     this.wait(); 
    } catch (InterruptedException ex) { 
     Thread.currentThread().interrupt(); 
    } 
} 

public String getMessage(){ 
    return this.message; 
} 
} 

但是一个可变值丢失,该变量的值是纬度和经度(格式:-903849323.20384; 230349402.03000)。当我使用wireshark捕捉数据时,我的价值也被忽略了。

截图 http://www.mediafire.com/view/?kjz1drb9jhda88a http://www.mediafire.com/view/?ov6lqn6u9n669my

为什么数据为空,有什么错。

回答

1

如果您看不到wireshark捕获的数据包内的值,那么在代码中获得空值是完全有效的。你还会期待什么?

这似乎更容易在设备上运行SNMP代理的问题/功能(例如地理位置没有设置,GPS信号不可用等)

+0

好的谢谢。我怀疑可能是我的网络有问题。检查后,这是由设备(GPS) – 2013-03-06 02:48:27