为长篇文章道歉,其中大部分都是需要显示的配置文件。
我一直在创建自己的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文件,但我认为这不重要吗?
答案 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 +代理是可以的。