1

JavaでSNMPエージェントを実装しようとしています。snmp4jライブラリ(http://www.snmp4j.org/)を使用しています。現在、私のエージェントはlocalhost/4700で動作します。次のリクエストのおかげで、snmpgetリクエストを送信しようとしました。

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1

しかし、「このOIDには現在そのようなインスタンスは存在しません」のようなものしか表示されません。これが私の問題です。作成方法がわかりません。MOTableに行を追加しようとしましたが、機能しないようです。

これがMOGRoupを実装する私のクラスの要約です

public class MyMIB 
//--AgentGen BEGIN=_EXTENDS
//--AgentGen END
implements MOGroup 
//--AgentGen BEGIN=_IMPLEMENTS
//--AgentGen END
{
    .
    .
    .

public static final OID oidTableEntry = 
    new OID(new int[] { 1,3,6,1,4,1,1,99,5,4,1,3,1 });
    .
    .
    .

private void createTableEntry(MOFactory moFactory) {
// Index definition
    .
    .
    .

// Table model
tableEntryModel = 
  moFactory.createTableModel(oidTableEntry,
                         tableEntryIndex,
                         tableEntryColumns);
((MOMutableTableModel)tableEntryModel).setRowFactory(
  new TableEntryRowFactory());
tableEntry = 
  moFactory.createTable(oidTableEntry,
                    tableEntryIndex,
                    tableEntryColumns,
                    tableEntryModel);

//Adding rows
ArrayList<Integer> oidMon1List= new ArrayList<Integer>();
oidRow1List = this.getListFromArray(oidTableEntry.getValue());
oidRow1List.add(1);

ArrayList<Integer> oidMon2List= new ArrayList<Integer>();
oidRow2List = this.getListFromArray(oidTableEntry.getValue());
oidRow2List.add(2);

DefaultMOMutableTableModel model =
               (DefaultMOMutableTableModel)tableEntry.getModel();

synchronized(model){
model.addRow(
        model.createRow(
                new OID(getArrayFromList(oidRow1List)), 
                new Variable[]{
                    new Integer32(123)
                    }));

model.addRow(
        model.createRow(
                new OID(getArrayFromList(oidRow2List)), 
                new Variable[]{
                    new Integer32(456)
                    }));   
    }
}

しかし、以下のリクエストはまだ機能しません。

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.0

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.1

行を正しく作成する方法を理解していなかったに違いありません。どうしたらいいか説明してもらえますか?

どうもありがとうございます !

ほんの少しの精度:これらの行をプログラムに追加しました:

System.out.println("Get row count: " +tableEntryModel.getRowCount());

//first row
System.out.println("TEST1: " +model.getRow(new OID(new int[] {1,3,6,1,4,1,1,99,5,4,1,3,1,1})).getValue(0));
System.out.println("TEST2: " +tableEntry.getValue(new OID(new int[] {1,3,6,1,4,1,1,99,5,4,1,3,1,1,0})));

最初のリターン:2(予想どおり)

2番目のリターン:123(予想どおり)

3番目の戻り値:null ...ここでは、理由がわかりません!

4

2 に答える 2

3

コードとリクエストが一致しませんでした。SNMP4J-Agent ではテーブルのセルのインスタンス OID が

<tableEntryOID>.<columnSubID>.<rowIndexOID>

したがって、テーブル オブジェクトの OID が 1.3.6.1.4.1.1.99.5.4.1.3.1 で、最初の列の最初のインスタンスに ID 1 を持たせたい場合は、次のように行を作成/追加する必要があります。

model.addRow(       
    model.createRow(       
            new OID(1), new Variable[]{ new Integer32(123) })); 

このセルは、次のコマンドで取得できます

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.1
于 2012-10-14T11:12:41.507 に答える
0

わかりました、私は何が間違っているかを見つけました。実際、私のコードは機能します。正しくないのは私の要求だけでした。

                                        | oidColumn 1.3.6.1.4.1.1.99.5.4.1.3.1.1
 oidRow1 1.3.6.1.4.1.1.99.5.4.1.3.1.1   |       oidColumn.oidRow1
 oidRow2 1.3.6.1.4.1.1.99.5.4.1.3.1.2   |       oidColumn.oidRow2

したがって、Row1 の最初の値を取得したい場合は、次の要求を行う必要があります。

snmpget -v2c -c public localhost:4700 1.3.6.1.4.1.1.99.5.4.1.3.1.1.1.3.6.1.4.1.1.99.5.4.1.3.1.1
于 2012-08-31T08:01:41.353 に答える