2013-02-20 93 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