1

長い投稿をお詫びします。その大部分は、表示する必要がある構成ファイルです。

独自の SNMP エージェントを作成しています。MIB と snmpd.conf ファイルを作成するために、Web で回答を検索しました。実際にハンドラーを実装するために、 http://www.net-snmp.org/dev/agent/example_8c_source.htmlにある example.c/.h を使用しました。

別の PC (すべて Linux) を使用して実装をテストしていますが、これまでのところ、 snmpwalk/snmpgetコマンドしか機能していません。

設定可能なオブジェクトのソース ファイル内に WriteMethod 関数を設定しました。問題は、オブジェクトを設定しようとしたときにこのコードが実行されているとは思わないことです。

以下は、オブジェクトを設定しようとする例です。

root@jt:/usr/share/snmp/mibs# snmpset -v 2c -c communityNameHere -m MIB-NAME-HERE.txt 10.20.30.40 1.3.6.1.4.1.12345.1 s "0"
MIB search path: /root/.snmp/mibs:/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp
Cannot find module (MIB-NAME-HERE.txt): At line 0 in (none)
Error in packet.
Reason: notWritable (That object does not support modification)
Failed object: iso.3.6.1.4.1.12345.1

-m オプションなしで snmpset を使用しようとしました。-m +MIB-NAME-HERE.txt も使用してみました。

質問- snmp.conf をコメントアウトしました。指定した MIB が /usr/share/snmp/mibs にあるのに、モジュールが見つからないのはなぜですか?

以下は私のMIBです:

MIB-NAME-HERE DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, Integer32, enterprises,
    NOTIFICATION-TYPE                       FROM SNMPv2-SMI
    OBJECT-GROUP, NOTIFICATION-GROUP        FROM SNMPv2-CONF
;

testSnmp MODULE-IDENTITY
    LAST-UPDATED "201505200000Z"
    ORGANIZATION "www.example.com"
    CONTACT-INFO
         "email: support@example.com"
    DESCRIPTION
        "MIB Example."
    REVISION     "201505200000Z"
    DESCRIPTION
        "version 1.0"
    ::= { enterprises 12345 }

--
-- top level structure
--
   testSnmpValues       OBJECT IDENTIFIER ::= { testSnmp 1 }

testSnmpValuesGroup OBJECT-GROUP
    OBJECTS { testObject
            }

    STATUS current
    DESCRIPTION
           "Group of all test variables."

    ::= { testSnmp 4 }

--
-- Values
--

testObject OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(1..4096))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
        "Test Example"
    ::= { testSnmpValues 1 }

質問- の目的は何ですか:

   testSnmpValues       OBJECT IDENTIFIER ::= { testSnmp 1 }

testSnmpValuesGroup OBJECT-GROUP
    OBJECTS { testObject
            }

    STATUS current
    DESCRIPTION
           "Group of all test variables."

    ::= { testSnmp 4 }

今私のsnmpd.confファイルのために:

###############################################################################
#
# snmpd.conf:
#   Test snmpd configuration file.  (See EXAMPLE.conf as a reference)
#
###############################################################################
# By default snmp looks here:
# /etc/snmp/snmpd.conf.
# Use '-C -c <configfile>' to override.
#

###############################################################################
# Access Control
###############################################################################

#       sec.name  source          community
com2sec testall    default         communityNameHere
#---- Community 'communityNameHere' uses security name 'testall'. 'source' selects which IPs can connect.


####
# Second, map the security names into group names:
#               sec.model  sec.name
group TestGroup  v1         testall
group TestGroup  v2c        testall
group TestGroup  usm        testall

####
# Third, create a view for us to let the groups have rights to:
#           incl/excl subtree                          mask
#view all    included  .1                               80
view testview included .1.3.6.1.4.1.12345
#---- testview - A view which only allows access to Test OIDs.

####
# Finally, grant the groups access to the 1 view with different
# write permissions:
#                context sec.model sec.level match  read    write   notif
#---- Grant read access to TEST group for all security models.
access  TestGroup ""      any       noauth    exact  testview testview testview

# -----------------------------------------------------------------------------

# load the testsnmp module
dlmod testsnmp /usr/local/testsnmp.so

質問- オブジェクトを書き込み可能にするために欠けているものはありますか? さまざまな形式の他の snmpd.conf ファイルを見てきましたが、それは問題ではないと思いますか?

4

2 に答える 2

1

通常、net-snmp が機能するために MIB は必要ありません。.c ファイルで OID が指定されていれば十分です。

リモート PC または同じ PC で snmpset/get/walk を試していますか。snmpd.conf で -> agentAddress udp:161 を指定する必要がありました。これがないと、アクセスできませんでした。

于 2015-05-29T09:11:31.657 に答える
1

MIB ファイルの最後に「END」がありません。ここで検証できます: simpleweb mib validation コミュニティに「public」という名前を付け、これを /etc/snmp/snmpd.conf に追加する必要がありました。

com2sec ConfigUser default public com2sec AllUser default public group ConfigGroup v1 ConfigUser group AllGroup v2c AllUser

これで、v1 でテストを実行できるようになります。export MIBS="MY-MIB"MY-MIB.txt は私の MIB ファイルであり、info /usr/local/share/snmp/mibs/ を配置する必要がありました。mib2c ツールに必要だったのか、それとも MIBS 変数の定義を省略できるのか正確には覚えていません。

次に、-d スイッチを指定して snmpd を開始し、デバッグ出力を確認し、エージェントを開始して、テストを実行できます。ファイアウォールで snmpd が使用するポートを有効にする必要がありましたが、デフォルトではブロックされていました。次のコマンドを使用して、ダミー値の読み取り/書き込みをテストできます。

snmpget -v1 -c public localhost:10161 MY-MIB::test2.0
MY-MIB::test2.0 = INTEGER: 43 tests
snmpset -v1 -c public localhost:10161 MY-MIB::test2.0 = 123
MY-MIB::test2.0 = INTEGER: 123 tests

エージェントが機能している限り、これは機能します。また、mib2c を使用してテスト MIB 用の単純なサブエージェントを作成し、それを使用してテストして、config+agent が適切であることを確認することもできます。

于 2015-06-01T08:14:12.740 に答える