centos7 net-snmp agentx
参考
Net-snmp总结(四)-net-snmp的MIBs扩展_添加set
https://blog.youkuaiyun.com/JIANGXIN04211/article/details/78477890
https://github.com/hosthvo/pyagentx
https://github.com/pief/python-netsnmpagent
http://www.net-snmp.org/docs/man/snmpwalk.html
/usr/share/snmp/mibs
/usr/share/snmp/mibs
https://sourceforge.net/projects/net-snmp/files/net-snmp/
http://www.net-snmp.org/wiki/index.php/Writing_your_own_MIBs
因为这个工具其实叫“AgenPro”而不是“AgentPro”.
配置文件:
sudo vi /etc/snmp/snmpd.conf
com2sec notConfigUser default public
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
view systemview included .1.3.6.1.4.1.8072.2
view systemview included .1.3.6.1.4.1.16533
view systemview included .1.3.6.1.4.1.77587
access notConfigGroup "" any noauth exact systemview none none
master agentx
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes
子代理程序
/home/mike/snmp_test/pyagentx-master/77587_example-agent.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import pyagentx
class NetSnmpTestMibScalar(pyagentx.Updater):
def update(self):
#self.set_INTEGER('1.0', 1000)
self.set_OCTETSTRING('1.0', 'ShangDong666Welcome')
#self.set_OBJECTIDENTIFIER('4.0', '1.2')
#self.set_IPADDRESS('5.0', '127.0.0.1')
#self.set_COUNTER32('6.0', 2000)
#self.set_GAUGE32('7.0', 2000)
#self.set_TIMETICKS('8.0', 1000000)
#self.set_OPAQUE('9.0', 'Test')
#self.set_COUNTER64('10.0', 2000)
#self.set_INTEGER('9.0',666)
class MyAgent(pyagentx.Agent):
def setup(self):
self.register('1.3.6.1.4.1.77587', NetSnmpTestMibScalar)
def main():
pyagentx.setup_logging()
try:
a = MyAgent()
a.start()
except Exception as e:
print "Unhandled exception:", e
a.stop()
except KeyboardInterrupt:
a.stop()
if __name__=="__main__":
main()
mibs配置文件
cd /usr/share/snmp/mibs/
sudo vi TEST-SET-MIB.txt
--开始
TEST-SET-MIB DEFINITIONS ::= BEGIN
--引入部分
IMPORTS
enterprises
FROM RFC1155-SMI
Integer32,OBJECT-TYPE
FROM SNMPv2-SMI
DisplayString
FROM SNMPv2-TC
TEXTUAL-CONVENTION
FROM SNMPv2-TC; --引用结束,用分号
--定义节点
--enterprises的OID是1.3.6.1.4
testSet OBJECT IDENTIFIER ::= {enterprises 77587}
writeObject OBJECT IDENTIFIER ::= {testSet 1}
writeObject OBJECT-TYPE --对象名称
SYNTAX DisplayString --类型
MAX-ACCESS read-write --访问方式
STATUS current --状态
DESCRIPTION "test write" --描述
::= {testSet 1} --父节点
--结束定义
END
测试方法:
snmpget -c public -v 2c localhost 1.3.6.1.4.1.77587.1.0
snmptranslate -Tp -IR TEST-SET-MIB::testSet
mib browser
停止防火墙
• 停止firewall
systemctl stop firewalld.service
• 禁止firewall开机启动
systemctl disable firewalld.service
systemctl status firewalld
安装 net-snmp
sudo yum install net-snmp net-snmp-utils
rpm -ql net-snmp
重启snmpd服务
sudo systemctl restart snmpd.service
sudo systemctl enable snmpd.service
sudo systemctl start snmpd.service
sudo systemctl status snmpd.service
常用命令
6 端口查看 sudo lsof -i:161
By default, NET-SNMP snmpwalk walks 1.3.6.1.2.1, according to it's man page
snmptranslate -To
snmptranslate -Tz | grep 8072
snmpwalk -v 2c -c public localhost 1.3.6.1.4.1.8072.2.3
snmpwalk -O n -v 2c -c public localhost
snmpwalk -v 2c -c public 127.0.0.1
snmpwalk -v 2c -c public 192.168.99.31
snmpwalk -v 2c -c public 127.0.0.1
-v 2c 指定版本信息
-c 指定团体名 public为默认团体名
2)snmpget获取指定OID的信息
snmpget -v 2c -c public 127.0.0.1 HOST-RESOURCES-MIB::hrSystemUptime.0
snmpget -v 2c -c public 127.0.0.1 HOST-RESOURCES-MIB::hrSystemUptime.0
snmpwalk -v 2c -c public 192.168.99.31
snmpwalk -c public 192.168.99.31
snmpwalk -v 1 -c public 192.168.99.31
snmpwalk -v 2c -c public 192.168.99.31 SNMPv2-MIB::sysContact.0
snmpget -v 2c -c public 192.168.99.31 SNMPv2-MIB::sysContact.0
ifconfig
history
snmpwalk -O n -v 2c -c public localhost
snmpwalk -v 2c -c public localhost 1.3.6.1.4.1.8072.2.3
snmpget -c public -v 2c 192.168.99.31 1.3.6.1.4.1.77587.1.0
虚拟机
VMware设置虚拟机与物理主机处于同一网段,桥接模式,
NAT模式是把虚拟机的网络和 物理主机 不处于一个网段
book 和 pdf
SNMP协议详解.pdf
SNMP的功能及使用.pdf
SNMP协议简介参照.pdf
深入理解Net-SNMP .pdf
snmpwalk -O n -v 2c -c public localhost 1.3.6.1.4.1.8072
class MyAgent(pyagentx.Agent):
def setup(self):
self.register('1.3.6.1.4.1.8072.2.1', NetSnmpTestMibScalar)
class NetSnmpTestMibScalar(pyagentx.Updater):
def update(self):
self.set_INTEGER('1.0', 1000)
self.set_OCTETSTRING('3.0', 'String for NET-SNMP-EXAMPLES-MIB')
self.set_OBJECTIDENTIFIER('4.0', '1.2')
“netSnmpExampleInteger” “1.3.6.1.4.1.8072.2.1.1”
“netSnmpExampleString” “1.3.6.1.4.1.8072.2.1.3”
“netSnmpExampleScalars” “1.3.6.1.4.1.8072.2.1”
“netSnmpIETFWGTable” “1.3.6.1.4.1.8072.2.2.1”
命令执行1
snmptable -v 2c -c public -Ci localhost NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
snmpwalk -v 2c -c public localhost NET-SNMP-EXAMPLES-MIB::netSnmpExampleScalars
[mike@localhost ~]$ sudo snmpset -v 2c -c public localhost 1.3.6.1.4.1.8072.2.1.1.0 i 10
Error in packet.
Reason: noAccess
Failed object: NET-SNMP-EXAMPLES-MIB::netSnmpExampleInteger.0
snmpset -c public -v 2c localhost 1.3.6.1.4.1.77587.1.0 s "hello world"
snmpset -v 2c -c public localhost NET-SNMP-EXAMPLES-MIB::netSnmpExampleString.0 s "Test"
1.还是从MIB开始。
由于只是一个简单的起停命令,前面定义的recordStatusTable中的Status字段完全满足要求,我们只需要给它设置一个不同的值就可以了。
之前在文件"/usr/local/share/snmp/mibs/FIGURE-IT-MIB.txt"中给它定义的访问属性是:“read-only”,将它改成“read-write”就OK了。
./NET-SNMP-AGENT-MIB.txt
例子程序
Minimal Agent
snmptranslate -Tz |grep 9999
“netSnmpExperimental” “1.3.6.1.4.1.8072.9999”
“netSnmpPlaypen” “1.3.6.1.4.1.8072.9999.9999”
cd /usr/share/snmp/mibs/
grep -r “9999”
NET-SNMP-MIB.txt:netSnmpExperimental OBJECT IDENTIFIER ::= {netSnmp 9999}
NET-SNMP-MIB.txt:netSnmpPlaypen OBJECT IDENTIFIER ::= {netSnmpExperimental 9999}
class NetSnmpPlaypen(pyagentx.Updater):
def update(self):
self.set_INTEGER('1.0', 1000)
self.set_OCTETSTRING('3.0', 'String for NET-SNMP-EXAMPLES-MIB')
class MyAgent(pyagentx.Agent):
def setup(self):
# Register Updater class that responsd to
# the tree under "netSnmpPlaypen": 1.3.6.1.4.1.8072.9999.9999
self.register('1.3.6.1.4.1.8072.9999.9999', NetSnmpPlaypen)
Example Agent
netSnmpExampleScalars OBJECT IDENTIFIER ::= { netSnmpExamples 1 }
“netSnmpExampleScalars” “1.3.6.1.4.1.8072.2.1”
“netSnmpExampleTables” “1.3.6.1.4.1.8072.2.2”
class NetSnmpTestMibScalar(pyagentx.Updater):
def update(self):
self.set_INTEGER('1.0', 1000)
self.set_OCTETSTRING('3.0', 'String for NET-SNMP-EXAMPLES-MIB')
self.set_OBJECTIDENTIFIER('4.0', '1.2')
self.set_IPADDRESS('5.0', '127.0.0.1')
self.set_COUNTER32('6.0', 2000)
self.set_GAUGE32('7.0', 2000)
self.set_TIMETICKS('8.0', 1000000)
self.set_OPAQUE('9.0', 'Test')
self.set_COUNTER64('10.0', 2000)
self.register(‘1.3.6.1.4.1.8072.2.1’, NetSnmpTestMibScalar)
self.register_set(‘1.3.6.1.4.1.8072.2.1.1.0’, NetSnmpIntegerSet)
def setup(self):
self.register('1.3.6.1.4.1.8072.2.1', NetSnmpTestMibScalar)
11
netSnmpExampleInteger OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-write
STATUS current
DESCRIPTION
"This is a simple object which merely houses a writable
integer. It's only purposes is to hold the value of a single
integer. Writing to it will simply change the value for
subsequent GET/GETNEXT/GETBULK retrievals.
This example object is implemented in the
agent/mibgroup/examples/scalar_int.c file."
DEFVAL { 42 }
::= { netSnmpExampleScalars 1 }
snmptranslate
您也可以尝试使用该snmptranslate实用程序,该实用程序比查看MIB文件更容易!
$ snmptranslate -On NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
.1.3.6.1.4.1.8072.2.2.1
$ snmptranslate -Of NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
.iso.org.dod.internet.private.enterprises.netSnmp.netSnmpExamples.netSnmpExampleTables.netSnmpIETFWGTable
$ snmptranslate 1.3.6.1.4.1.8072.2.2.1
NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable
$ snmptranslate -Of 1.3.6.1.4.1.8072.2.2.1
.iso.org.dod.internet.private.enterprises.netSnmp.netSnmpExamples.netSnmpExampleTables.netSnmpIETFWGTable
RW
snmptranslate -IR -Tp netSnmpExampleInteger.0
±- -RW- Integer32 netSnmpExampleInteger(1)
4.使用snmptranslate -IR -Tp hikvision
检查是否能正确生成MIB树。
2022-04-13 18:25:30,387 - pyagentx.network - INFO - Received GET PDU
2022-04-13 18:25:30,388 - pyagentx.network - DEBUG - OID: 1.3.6.1.4.1.77587.1765
2022-04-13 18:25:30,388 - pyagentx.network - DEBUG - OID Found
2022-04-13 18:25:30,389 - pyagentx.pdu - DEBUG - PDU DUMP: New PDU
2022-04-13 18:25:30,389 - pyagentx.pdu - DEBUG - PDU DUMP: Meta : [RESPONSE_PDU: 15 1680 1681]
2022-04-13 18:25:30,390 - pyagentx.pdu - DEBUG - PDU DUMP: Values : [{‘name’: u’1.3.6.1.4.1.77587.1765’,
‘type’: 4,
‘value’: u’{“field_name”: “current_roll”, “value”: “+14.33”, “timestamp”: 1649845522.1424496}'}]
2022-04-13 18:22:02,308 - pyagentx.network - INFO - Received GET PDU
2022-04-13 18:22:02,308 - pyagentx.network - DEBUG - OID: 1.3.6.1.4.1.77587.1827
2022-04-13 18:22:02,308 - pyagentx.network - DEBUG - OID Found
2022-04-13 18:22:02,309 - pyagentx.pdu - DEBUG - PDU DUMP: New PDU
2022-04-13 18:22:02,309 - pyagentx.pdu - DEBUG - PDU DUMP: Meta : [RESPONSE_PDU: 11 1678 1679]
2022-04-13 18:22:02,310 - pyagentx.pdu - DEBUG - PDU DUMP: Values : [{‘name’: u’1.3.6.1.4.1.77587.1827’,
‘type’: 4,
‘value’: u’{“field_name”: “sat_info20”, “value”: “100.50\u5ea6, 12749.750MHz, \u5782\u76f4\u6781\u5316”, “timestamp”: 1649845309.45102}'}]
2022-04-13 18:22:03,299 - pyagentx.network - ERROR - Empty PDU, connection closed!
2022-04-13 18:22:03,300 - pyagentx.network - ERROR - Network error, master disconnect?!