创建SNMPD代理 - 可写对象等

时间:2015-05-28 13:50:21

标签: snmp net-snmp snmpd

为长篇文章道歉,其中大部分都是需要显示的配置文件。

我一直在创建自己的SNMP代理。为了创建我的MIB和snmpd.conf文件,我刚刚在网上搜索了答案。为了实际实现处理程序,我使用了http://www.net-snmp.org/dev/agent/example_8c_source.html

中的example.c / .h

我正在使用另一台PC(所有Linux)来测试我的实施,到目前为止,我只能使 snmpwalk / snmpget 命令工作。

我在源文件中为我的setable对象设置了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文件,但我认为这不重要吗?

2 个答案:

答案 0 :(得分:1)

您通常不需要MIB来使用net-snmp。只要在.c文件中指定了OID就足够了。

您是在远程PC上还是在同一台PC上尝试snmpset / get / walk。 我必须在我的snmpd.conf中指定 - &GT; agentAddress udp:161 没有它,我没有访问权。

答案 1 :(得分:1)

您的MIB文件丢失&#34;结束&#34;最后,您可以在此处验证:simpleweb mib validation 我将我的社区命名为#34; public&#34;并且必须在/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为你的test-MIB创建简单的子代理并用它来测试它,只是为了确保你的config +代理是可以的。