如何从fdb表获取值mac和vlan使用python?
在bash snmpwalk工作正常:
snmpwalk -v2c -c pub 192.168.0.100 1.3.6.1.2.1.17.7.1.2.2.1.2
Run Code Online (Sandbox Code Playgroud)
pysnmp:
import os, sys
import socket
import random
from struct import pack, unpack
from datetime import datetime as dt
from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.proto.rfc1902 import Integer, IpAddress, OctetString
ip='192.168.0.100'
community='pub'
value=(1,3,6,1,2,1,17,7,1,2,2,1,2)
generator = cmdgen.CommandGenerator()
comm_data = cmdgen.CommunityData('server', community, 1) # 1 means version SNMP v2c
transport = cmdgen.UdpTransportTarget((ip, 161))
real_fun = getattr(generator, 'getCmd')
res = (errorIndication, errorStatus, errorIndex, varBinds)\
= real_fun(comm_data, transport, value)
if not errorIndication is None or errorStatus …Run Code Online (Sandbox Code Playgroud) 我想读取经理所拥有的MIB文件中的所有对象.
我开发了一个工具来从启用SNMP的代理中获取一些数据.我想通过显示管理器的MIB文件中的所有OID来增强该工具.
我正在使用NET-SNMP库.
我看到以下内容:
/usr/local/share/snmp/mibs/
Run Code Online (Sandbox Code Playgroud)
文件夹,它包含许多MIB文件,但我如何形成它拥有的OID列表?
我浏览了MIB并查看了结构,但是如何获取MIB文件中提到的每个对象的OID?
我想列出所有OID,如下所示:
SNMPv2-MIB::sysDescr.0 = .1.3.6.1.2.1.1.1.0SNMPv2-MIB::sysObjectID.0 = .1.3.6.1.2.1.1.2.0
......等我想扫描所有MIB文件并查找文件中的所有OID.
我该怎么做呢?
我在Ubuntu上成功编译了net-snmp-5.7.3.:D这是Ubuntu的特定版本:
Linux loserBox 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
我似乎也成功安装了net-snmp的Python绑定.这包含在net-nsmp下载中,作为其中包含文件的标题为"Python"的不同文件夹setup.py.但是在运行命令时python setup.py test我发现了一些问题.我认为这可能没有什么可担心的,所以我继续执行python setup.py install我不知道README文件中的说明是什么意思,"python setup.py test(需要一个本地运行的代理w/config提供)".所以,这就是我用失败的测试安装它的原因.无论如何,我不确定这是否是一个问题.
在成功安装net-snmp的python绑定后,我将目录切换回我的桌面并打开了一个交互式python shell.从这里我导入netsnmp模块并收到以下错误.它几乎看起来在变量netsnmp_memdup中有一个拼写错误,它会在Traceback中引发错误.这看起来像是C代码而不是python的问题.
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import netsnmp
/usr/lib/python2.7/dist-packages/pkg_resources.py:1031: UserWarning:
/home/loser_user/.python-eggs is writable by group/others and vulnerable to attack
when used with get_resource_filename. Consider a more secure location
(set with …Run Code Online (Sandbox Code Playgroud) 我写了一个AgentX应用程序(Linux,gcc,g ++),它可以很好地发送回缩放器.这是我现在正在做的事情:
init_agent( "blah" );
netsnmp_register_read_only_scalar( netsnmp_create_handler_registration( "foo1", handle_foo1, oid, oid.size(), HANDLER_CAN_RONLY ) );
init_snmp( "blah" );
while ( true )
{
// internal stuff
agent_check_and_process(1); // where 1==block
}
Run Code Online (Sandbox Code Playgroud)
handle_foo1(...)调用函数snmp_set_var_typed_value(...)返回在应用程序中的全局C结构中缓存的值.
我现在要做的是修改此代码以支持SNMP表.表的内容作为STL容器存储/缓存在应用程序中.这是一个相对简单的SNMP表,具有连续的行,所有列都由Integer32,Gauge32,InetAddress和TruthValue等类型组成.问题是我在net-snmp网站上看不到很好的代码示例,只是很多doxygen页面.
我的问题:
我应该看什么API?这些是正确的电话:
netsnmp_register_read_only_table_data();
netsnmp_create_table_data();
netsnmp_create_table_data_row();
netsnmp_table_data_add_row();
Run Code Online (Sandbox Code Playgroud)
......或者我应该使用哪些更简单的东西?
我正在尝试按照以下链接配置SNMP代理.
http://www.net-snmp.org/tutorial/tutorial-5/toolkit/mib_module/
./configure --with-mib-modules="nstAgentModuleObject"make install
运行snmpd
现在我无法使用以下命令获取变量值
snmpget localhost NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject.0
Run Code Online (Sandbox Code Playgroud)
它为我提供了以下错误.
root@Naseeb:/home/admin-pc/Naseeb/Projects/EMS/net-snmp-5.4.4# snmpget -v2c -c public localhost NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject.0
NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject.0 = No Such Object available on this agent at this OID
Run Code Online (Sandbox Code Playgroud)
请告诉我这些步骤中是否有任何遗漏.
我正在实现自己的MIB,并使用smilint检查以验证MIB.我收到了很多node xxx must be contained in at least one conformance group警告.
我无法破译OBJECT-GROUP的目的以及它在MIB文件中的位置.它是否提供了一种机制,用于对位于同一OID子树中的各种OID的相关托管OBJECT-TYP进行分组?是否真的需要,因为我可以设计一个有用的MIB吗?
我也在努力理解与对象相关的MODULE-COMPLIANCE宏的目的.这是否适用于扩展我正在创建的MIB?
类似的问题已经被问过SO 这里,我发现窗台不清楚,因为对象的集团是一个完全不同的树下下一个OID定义和引用的对象类型.谢谢
我已经在带有 debian 10 buster 的 Linux 机器上安装了 net-snmp,现在我需要安装 snmp-mibs-downloader。
虽然我之前也跑过
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)
执行时:
sudo apt-get install snmp-mibs-downloader
Run Code Online (Sandbox Code Playgroud)
显示以下屏幕输出,表明找不到请求的数据包:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package snmp-mibs-downloader is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'snmp-mibs-downloader' has no installation candidate
Run Code Online (Sandbox Code Playgroud)
我在网上看到可以通过编辑文件来解决这个问题
/etc/apt/sources.list.d/nonfree.list
Run Code Online (Sandbox Code Playgroud)
但它没有解释其中应该写什么。
感谢任何允许我安装 snmp-mibs-downloader 的帮助。
我正在编写SNMP代理,MIB定义包含一个类型为Unsigned32的OID.
代理的Unix实现使用Net-SNMP并将OID设置为ASN_UNSIGNED类型,因为它没有ASN_UNSIGNED32.当我使用Wireshark查看GET响应时,它将其解码为"Gauge32"值.乍一看是有道理的,因为根据RFC 1902,Unsigned32和Gauge32是相同的.
Windows实现基于Windows的SnmpAPI.lib并将OID设置为ASN_UNSIGNED32,当我使用Wireshark查看GET响应时,它将其解码为"Unsigned32".这看起来对我来说更好.
为什么2个实现在线上产生不同的结果?
哪个版本正确,我如何才能从两个实现中获得相同的版本?
我是 SNMP 新手。据我所知,snmpd 是一个 SNMP 的 Linux 守护进程,充当 SNMP 代理。我们可以从 snmpd 包中安装它。现在net-snmp还提供了SNMP代理。
net-snmp是否提供snmpd守护进程作为其代理,如果是的话,如果已经安装了snmpd(假设只需要SNMP代理),那么安装net-snmp有什么用?
我最近更改了我的自定义 MIB 文件以包含表,而不仅仅是标量,它会验证,我可以创建子代理等,但是如果我尝试阅读它,它会说没有条目:
snmptable -v1 -c public hostname:10161 myMibName::myTable
myMibName::myTable: No entries
Run Code Online (Sandbox Code Playgroud)
好吧,我没有在我的代理代码中向该表添加任何默认/示例行。
如果我尝试使用 snmpset 设置表的某些值,就像我在标量上所做的那样,它总是失败,因此表需要自己的语法。
如何使用 snmpset 或类似内容向表中添加一行?
例如,示例表可能看起来如此简单,其中 'myString' 是索引:
MyTableEntrySequence::= SEQUENCE {
myString
OCTET STRING,
test1
Integer32,
test2
Integer32
Run Code Online (Sandbox Code Playgroud)
}
编辑:我没有在我的表中使用 RowStatus。我是否需要使用 RowStatus 才能添加新行?
EDIT2:我已经从 net-snmp 样本编译了 data_set.c 代理,它用一些数据填充样本表,并可以使用 snmptable 查询其内容:
snmpwalk -v 1 -c public hostname:10161 netSnmpIETFWGTable
NET-SNMP-EXAMPLES-MIB::nsIETFWGChair1."snmpv3" = STRING: "Russ Mundy"
NET-SNMP-EXAMPLES-MIB::nsIETFWGChair2."snmpv3" = STRING: "David Harrington"
Run Code Online (Sandbox Code Playgroud)