我正在编写网络管理系统,并且需要能够在从SNMP陷阱接收的OID后面打印出有意义的名称.由于该系统的性质/大小,在每个正在使用的设备上手动将每个OID映射到有意义的名称并不是一个好主意.
话虽如此,是否有一种免费(商业用途)方式将名称/描述与其各自的OID自动配对,用于MIB中的所有OID; 那些配对在Java程序中使用?
换句话说,是否有工具或方法将MIB树转换为可在程序中遍历的Java对象以检索OID的名称/描述?
谢谢
MIB有免费的可视化工具吗?我已经被分配了一些SNMP陷阱规范化/浓缩工作,并开始使用Cisco ONS 15454s.MIB似乎比我见过的其他人更复杂.大量对象交叉引用,包括一些在其他MIB中定义并导出的对象.尝试追踪警报端口号的快速示例:
报警定义:
Cerent454AlarmEntry ::= SEQUENCE {
cerent454AlarmIndex INTEGER,
cerent454AlarmObjectType Cerent454EntityClass,
cerent454AlarmSlotNumber INTEGER,
cerent454AlarmPortNumber CerentPortNumber,
cerent454AlarmLineNumber INTEGER,
cerent454AlarmObjectIndex INTEGER,
cerent454AlarmType Cerent454AlarmType,
cerent454AlarmState CerentNotificationClass,
cerent454AlarmTimeStamp TimeStamp,
cerent454AlarmObjectName DisplayString,
cerent454AlarmAdditionalInfo DisplayString
}
Run Code Online (Sandbox Code Playgroud)
CerentPortNumber引用来自同一个文件(CERENT-454.mib):
IMPORTS
(...)
CerentPortNumber
FROM CERENT-TC
(...)
cerent454AlarmPortNumber OBJECT-TYPE
SYNTAX CerentPortNumber
ACCESS read-only
STATUS mandatory
DESCRIPTION
"This will indicate what is the port
of the object which raised this alarm."
::= { cerent454AlarmEntry 40 }
Run Code Online (Sandbox Code Playgroud)
CerentPortNumber的实际语法,来自CERENT-TC.mib:
CerentPortNumber ::=
INTEGER
{ unknown (1),
port0 (5),
port1 (10),
port2 (20),
(...) …
Run Code Online (Sandbox Code Playgroud) 我发送SNMP getBulkRequest
,使用基于某些第三方库(如agent ++,snmp ++等)的专有SNMP浏览器,具有多个OID,例如
.1.3.6.1.2.1.1.1
.1.3.6.1.2.1.1.5
.1.3.6.1.2.1. 1.6
.1.3.6.1.2.1.1.4
是否保证返回的集合(如果存在具有此类前缀的OID)将以完全相同的顺序返回?
例如
.1.3.6.1.2.1.1.1.0
.1.3.6.1.2.1.1.5.0
.1.3.6.1.2.1.1.6.0
.1.3.6.1.2.1.1.4.0
欢迎任何答案,文档链接,与此问题相关的提示.
更新:非Repeater = 0,MaxRepetitions> = 1
与 Snmpv2 和 Snmpv1 相比,Snmpv3 是一种安全协议。但我不明白上下文名称的用途是什么。我们已经有了一个用户名以及提供安全级别的身份验证和隐私密码。使用wireshark 的人无法识别它,因为它是通过加密形式发送的。那么在Snmpv3中context name有什么用呢?
我正在编写一个脚本,用于监控来自nagios的特定主机上的流量.我已经研究了一些已经制作的脚本并且已经收集了我需要做的几乎所有信息,但是我在识别流量所需的OID时遇到了问题.我想使用IF-MIB::ifOutOctets.1
和IF-MIB::ifInOctets.1
获取传入和传出流量但是当我使用以下行测试时:
snmpwalk -v 1 -c public myComputer OID
Run Code Online (Sandbox Code Playgroud)
对于OID而言,我得到了相同的结果,这似乎并不正确.如果我可以尝试其他变量而不是我现在使用的那些变量,那我就会徘徊.
它会很有用,即使你可以指出我可以在哪里找到一些信息IF-MIB
,因为我可以得到所有的价值,snmpwalk
但我不知道如何解释它们
我正在使用snmp来监控一些服务器(主要是win2k3),在我上网的过程中,我找到了Oracle用来监控JVM,JVM-MANAGEMENT-MIB的MIB.到目前为止我用它做的是:
通过这些步骤,我认为我很高兴尝试.所以我用snmp4j创建了一个java程序,当我尝试从JVM mib调用OID时,我遇到了一个错误Request timed out
.奇怪的是,我只编译JVM-MANAGEMENT-MIB,所以我应该只能访问那些OID,对吧?但事实并非如此,我仍然可以访问cpu使用情况,进程数量......
那么我错过了什么?谢谢
我尝试编写一些代码来检索objectID,结果是2B-06-01-04-01-82-31-01-03-01-01
.这个值不正确吗?
// Send a SysObjectId SNMP request
response = conn.get("get", argv[0], argv[1], "1.3.6.1.2.1.1.2.0");
if (response[0] == 0xff)
{
Console.WriteLine("No response from {0}", argv[0]);
return;
}
// Get the community and MIB lengths of the response
commlength = Convert.ToInt16(response[6]);
miblength = Convert.ToInt16(response[23 + commlength]);
// Extract the MIB data from the SNMp response
datatype = Convert.ToInt16(response[24 + commlength + miblength]);
datalength = Convert.ToInt16(response[25 + commlength + miblength]);
datastart = 26 + commlength + miblength;
output= BitConverter.ToString(response, datastart, datalength);
Console.WriteLine(" …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在PySNMP中使用MIB文件.代码相当简单.没什么复杂的.只是试图在OID下获取信息.我正在使用的代码如下:
#!/usr/local/bin/python2.7
from pysnmp.smi import builder, view, error
from pysnmp.entity.rfc3413.oneliner import cmdgen
cmdGen = cmdgen.CommandGenerator()
mibBuilder = builder.MibBuilder()
mibPath = mibBuilder.getMibPath() + ( '/path/to/command/mibs', )
mibBuilder.setMibPath( *mibPath )
mibBuilder.loadModules(
'MIB-File',
)
mibView = view.MibViewController( mibBuilder )
errorIndication, errorStatus, errorIndex, \
varBindTable = cmdGen.nextCmd(
cmdgen.CommunityData( 'Name', 'Community' ),
cmdgen.UdpTransportTarget( ( 'IP Address', 161 ) ),
( ( '', 'serverName' ), ),
)
print varBindTable
Run Code Online (Sandbox Code Playgroud)
我知道放入此数据的数据是准确的,因为当我使用asynCommandGenerator.asyncNextCmd
相同的数据时udpTransportTarget
,CommunityData
它的工作没有问题.此外,我看到的错误非常特定于MibBuilder组件.
我看到的错误是:
Traceback(最近一次调用最后一次):
文件"./snmpcollectortest.py",第11行,in
'NS-MIB-SMIv2的',
在loadModules中输入文件"/usr/lib/python2.7/site-packages/pysnmp-4.2.1-py2.7.egg/pysnmp/smi/builder.py",第221行
pysnmp.smi.error.SmiError:MIB模块"/path/to/command/mibs/MIB-File.py"加载错误:搜索路径中找不到MIB文件"ASN1.py [co]"
更新:
我发现我没有安装M2Crypto,这就是为什么我找不到ASN1.py. 不过我已经纠正了这一点,我仍然得到同样的错误.
运行snmptranslate -IR sysSwYear时出错
*预期"("(_):/usr/share/snmp/mibs/ZYXEL-ES2108G-MIB.txt中的第939行应为ACCESS(to):/ usr/share/snmp/mibs/ZYXEL中的第939行-ES2108G-MIB.txt OBJECT-TYPE的错误解析:/usr/share/snmp/mibs/ZYXEL-ES2108G-MIB.txt中的第939行未知对象标识符:sysSwYear ....*
它背后的原因是什么?请帮帮我
我必须使用我一直在研究的BASH脚本从一些支持SNMP的网络打印机中收集一些OID.
我的请求:
snmpget -v2c -c public 192.168.0.77
.1.3.6.1.2.1.1.1
.1.3.6.1.2.1.1.2
Run Code Online (Sandbox Code Playgroud)
我的实际回应:
.1.3.6.1.2.1.1.1 = Counter32: 1974
.1.3.6.1.2.1.1.2 = Counter32: 633940
Run Code Online (Sandbox Code Playgroud)
期望的回应:
1974
633940314
Run Code Online (Sandbox Code Playgroud)
(仅限oid值)
我使用以下网站的资源查看并测试了几个选项:
http://www.netsnmp.org/docs/man/snmpcmd.html#lbAF
-Oq
删除'='以便运行
snmpget -v2c -c public -Oq 10.15.105.133
.1.3.6.1.2.1.1.1
.1.3.6.1.2.1.1.2
Run Code Online (Sandbox Code Playgroud)
回报
.1.3.6.1.2.1.1.1 Counter32: 1974
.1.3.6.1.2.1.1.2 Counter 32: 633940314
Run Code Online (Sandbox Code Playgroud)
所以我知道我正在正确地表达我的要求.
我正在取值并将它们写入MYSQL dB,我在我的故事模式中设置数据类型,请求是一致的所以我知道OID的定义,所以我不需要我得到的所有信息,只是OID本身的值,所以我可以把它写到我的dB而不操纵响应.我可能可以操纵响应将信息拉到":"的右边并写入OID的值.
我是相对较新的SNMP(http://www.net-snmp.org/),但我不明白为什么这不是一个更常见的问题,因为我一直在寻找答案,这篇文章是我的最后一篇追索权...
我需要一个可以监视 SNMP 代理的 SNMP 服务器。为此,我编写了一个基本的Python应用程序,并运行了一个SNMP代理(基于polinux/snmpd图像),在同一网络上,该代理具有固定的IP地址。当我从服务器容器运行 SNMP get 查询时,我得到了所需的 OIB,但是当我想使用 PySnmp 以编程方式执行相同操作时,它不起作用。我尝试了很多方法但没有成功。
你有什么主意吗?
我的泊坞窗撰写文件:
services:
spm-health-service:
build:
context: .
dockerfile: docker/Dockerfile
restart: unless-stopped
env_file:
- .env
ports:
- "4500:4500"
depends_on:
- scs-server
- network-device-identifier
spm:
image: polinux/snmpd
restart: unless-stopped
privileged: true
ports:
- "161:161/udp"
volumes:
- ./resources/snmpd-conf/snmpd.conf:/etc/snmp/snmpd.conf
- ./resources/spm-mib/:/usr/local/share/snmp/mibs/
networks:
default:
ipv4_address: 10.5.0.5
networks:
default:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
Run Code Online (Sandbox Code Playgroud)
当我进入“spm-health-service”的bash shell时,我的命令和结果:
$ winpty docker exec -it 627 bash
root@627d241920e3:/app# snmpget -v2c -t 10 -c …
Run Code Online (Sandbox Code Playgroud)