2011-08-03 6 views
4

私はまだSNMPを学んでいます。私はライブラリだけでなく、snmp4jを使っていますが、ソースコードを読み込んでいます。エージェントとテストクライアントをプログラミングしました。私がしたいことは、テストクライアントから入ってきた要求をチェックし、具体的に特定のOIDへの「セット」要求をリッスンすることです。SNMP経由で入ってきたリクエストを確認する

私が考えている現在の方法は、snmp4jメソッドfireProcessMessage(パッケージorg.snmp4j.transport.DefaultUdpTranportMappingにあります)が実行された直後に要求をキャッチしていますが、エージェントが独自のmibにoidをどのように問い合わせているかわかりません。エージェントがMIBからOID値を取得するために使用するメソッドはありますか?

またはのリクエストを受け取るには、より良い方法がありますか?私がしたいことをすることさえ可能ですか?基本的には、クライアントが特定のOID値を1(真)に設定した場合、別のプロセスを実行します。

答えて

0

私はsnmp4jのエージェント側での経験はありませんが、公式メーリングリスト:http://lists.agentpp.org/pipermail/snmp4j/にこの質問を投稿することをお勧めします。それはかなり活発ですが、あなたは数時間で良い答えを得るでしょう。

11

それは、私が行っているようCommandProcessor を延長し、RequestHandler

を実装することによって行うことができます

public class SNMPRequestProcessor extends CommandProcessor 
{ 

SetHandler setHandler = new SetHandler(); 

public SNMPRequestProcessor() 
{ 
    //Your code 
} 


@Override 
protected void processRequest(CommandResponderEvent command, CoexistenceInfo cinfo, RequestHandler handler) 
{ 

    synchronized (command) { 
     if (command.getPDU().getType() == PDU.SET) { 
      super.processRequest(command, cinfo, setHandler); 
     } 

     super.processRequest(command, cinfo, handler); 
    } 

} 

/** 
* Handler for process set request which update to the database 
* 
*/ 

class SetHandler implements RequestHandler 
{ 

    @Override 
    public boolean isSupported(int mode) 
    { 
     return mode == PDU.SET; 
    } 

    @Override 
    public void processPdu(Request request, MOServer server) 
    { 
       //your code 
    } 
} 

} 
関連する問題