问题标签 [snmpd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
snmp - 错误的源 IP 地址在 NMS 中显示为 net-snmp 陷阱
我正在使用 net-snmp 5.7.3(linux 平台)并使用它来让我的服务的主代理充当子代理。
我正在通过 snmp 转发我的服务生成的所有 v1 陷阱。
我的 snmpd.conf 有以下条目:
我的 snmptrapd.conf 文件是这样的:
我观察到的问题是 net-snmp 正在机器 192.168.42.1 上运行,但是当我在 NMS 应用程序中检查转发的陷阱详细信息时,我得到不同的源 IP 地址,即“SNMPv1 代理地址”:1.1.1.1
1.1.1.1 是我的服务的内部 IP 地址,配置在不同的接口 eth0.1 上。为什么 net-snmp 使用错误的接口来获取其运行的机器的 IP 地址?
我可以以某种方式指定特定的接口名称,以便陷阱包含正确的源 IP 地址吗?
我的接口配置如下:
我的期望是我应该看到 192.168.42.1 作为 NMS 应用程序收到的陷阱的源 IP 地址
谢谢。
ping - 支持 IPv6 地址的 SNMP ping
IPv6 地址是否支持“SNMP ping”?还有最新的 NET-SNMP 库是否提供对“SNMP ping”的支持。RFC 4560 谈到了 snmp ping,但没有提到任何关于 IPv6 地址的内容。 https://www.rfc-editor.org/rfc/rfc4560
谢谢-拉维
linux - snmpd.conf + snmp 配置
我有以下snmpd.conf(这个文件是所有 125 linux redhat 机器上的同一个文件,版本 5、6、7)
在文件中我还有一行 - /usr/lib64/libcmaX64.so
但文件
实际上并不存在于我们所有的机器上!
那么,从 snmpd.conf 文件中删除这一行是否安全?
第二
-dlmod cmaX是什么意思.....
bash - 当通过 snmp pass 调用时,shell 脚本未捕获命令输出
问题
SNMPD 正确地将 SNMP 轮询请求委托给另一个程序,但该程序的响应无效。具有相同参数的程序的手动运行响应正确。
细节
我已经在服务器上安装了正确的 LSI RAID 驱动程序并想要配置 SNMP。根据说明,我添加了以下内容以/etc/snmp/snmpd.conf
将具有给定 OID 前缀的 SNMP 轮询请求重定向到程序:
它不适用于 SNMP 轮询请求:
我得到以下回复:
我试过的
SNMPD 传递两个参数,-g
和<oid>
期望一个三行响应<oid>
,<data-type>
和<data-value>
。
如果我手动运行以下命令:
我正确地得到了正确的三行响应:
这意味着该pass
命令正常工作并且/usr/sbin/lsi_mrdsnmpmain
程序在此示例中正常工作
我尝试用/usr/sbin/lsi_mrdsnmpmain
bash 脚本替换。bash 脚本委托调用并记录所提供的参数和委托调用的输出:
并修改pass
命令以重定向到 bash 脚本。如果我手动运行 bash 脚本,/usr/sbin/snmp-pass-test -g .1.3.6.1.4.1.3582.5.1.4.2.1.2.1.32.0
我会得到正确的三行响应,就像我/usr/sbin/lsi_mrdsnmpmain
手动运行时一样,我会记录以下内容:
当我重新运行snmpget
测试时,我得到了同样的Error in packet...
错误,并且 bash 脚本的日志显示捕获的委托调用输出为空:
如果我将 bash 脚本修改为仅回显一个空行,我也会收到相同的Error in packet...
消息。
我还尝试确保手动调用时存在的环境变量/usr/sbin/lsi_mrdsnmpmain
与 bash 脚本相同,但我得到相同的空输出。
最后,我的问题
- 为什么 bash 脚本在这两种情况下的行为会有所不同?
- bash 脚本存在的问题是否可能与最初注意到的相同(手动运行的程序与 SNMPD 运行程序的输出不同)?
更新
eewanco 的建议
在每个场景中运行程序的用户是什么?
我添加echo "$(whoami)" > /var/log/snmp-pass-test
到 bash 脚本root
并被添加到日志中
也许尝试在 cron 中执行它
将以下内容添加到 root 的 crontab 并记录正确的三行响应:
格里沙·列维特的建议
尝试记录标准错误
没有记录任何错误
检查 /var/log/messages
当我通过 SNMPD 运行它时,我会MegaRAID SNMP AGENT: Error in getting Shared Memory(lsi_mrdsnmpmain)
登录。当我直接运行它时,我没有。我做了一些谷歌搜索,我可能需要安装 lm_sensors;我会试试这个。
我安装了 lm_sensors 和 compat-libstdc++-33.i686(后者是因为它说它是说明中的先决条件,我错过了它),卸载并重新安装了 LSI 驱动程序并遇到了同样的问题。
SELinux
我偶然发现了一个关于使用脚本扩展 snmpd 的页面,它说要检查脚本是否具有正确的 SELinux 上下文。我grep AVC /var/log/audit/audit.log | grep snmp
在运行 a 之前和之后运行,snmpget
并添加了以下条目作为运行的直接结果snmpget
:
我现在假设SELinux 导致调用失败;我会进一步挖掘......请参阅解决方案的答案。
strace(eewanco 的建议)
尝试使用带和不带 snmp 的 strace,看看是否可以捕获系统调用失败或一些其他提示
为了完整起见,我想看看 strace 是否暗示 SELinux 正在否认。我不得不删除semodule -r <policy-package-name>
用于重新引入问题的策略包,然后运行以下命令:
结尾strace.log
如下,除非我遗漏了什么,否则它似乎没有提供任何提示:
php - 具有除端口 161 以外的其他端口的 snmpget() 不起作用
我试图通过以下来源获取 snmp 设备的名称。
我只获得通过端口 161 访问的第一个 snmpget() 方法的输出。其他 snmpget() 不起作用。根据研究 161 是默认端口。但是我需要为不同的 IP 地址设置不同的端口。让我知道如何为 net-snmp 设置其他端口选项
c - Net-SNMP 自定义 MIB 处理程序
我想为此 mib 创建自定义 MIB 和自定义控制器。我使用Net-SNMP
代理设备是snmpd
安装在它上面的基于 Debian 的 Linux 机器。我创建了模板.c
并.h
使用mib2c
. 此时,我不知道如何处理这些生成的文件?我想在我的应用程序中处理一些(我在 MIB 中创建的)SNMP 请求Clang
。所以基本上,如果我将生成的源代码复制mib2c
到我的C
项目中,它会起作用吗?我不需要将这些处理程序注册到 snmpd 吗?
我遵循了本教程,但它专注于编写代码。它没有提到编译和执行。
snmp - 为什么在执行 snmpset 命令时出现这些错误?
snmpset -OQ -v 2c -c SNMPv2-MIB::ocStbHostRebootReset.0 i = 1
上面写的是我在腻子中执行的代码,因为我必须重新启动盒子,所以对于真实值,我给出 i=1。
但是执行此操作后我遇到了错误
snmpset:未知主机(SNMPv2-MIB::ocStbHostRebootReset.0)(没有这样的文件或目录)
docker - Docker 在尝试重新启动时运行返回“snmpd 既不是服务也不是目标!?”
我是 Docker 新手。我尝试在 opensuse13.2 docker 映像上安装 snmpd。安装完成。Docker 构建执行得很好。但是当尝试重新启动或检查 snmpd 服务的状态时,我遇到了错误
“snmpd 既不是服务也不是目标!?”
我的 Dockerfile:
入口点.sh:
Docker 构建输出:
难道我做错了什么?
有人可以帮我吗?提前致谢。
linux - 尽管使用了适当的工具链文件,但为什么 CMake 在交叉编译 Net-SNMP 代理时显然是指主机系统文件?
我正在开发一个Net-SNMP子代理,其最终目标是 ARM 板,因此我使用CMake来更轻松地管理构建本机和交叉编译版本。我开始在我的主机平台 (x86_64) 上对其进行测试,它可以与这个CMakeLists.txt文件一起构建并正常工作:
我使用单独的构建目录,所以我不混合构建和源文件,它们与CMakeLists.txt文件一起保留,所以这些命令的输出......
...如下:
运行make
,它构建得很好:
它snmp_agent
作为 agentX 子代理运行,连接到主主代理并正确回答针对标量对象的snmpd
SNMP 请求。entPhysicalEntry
好的,到目前为止一切顺利。问题是当我尝试交叉编译它时,它在我的最终目标上做同样的事情,这是一个 ARMv7 Allwinner A20 板。我已经有一个可用的交叉工具链——我使用Crosstool-NG创建的。它位于搜索 PATH 中,其工具以前缀 开头armv7-a20_allwinner-linux-gnueabihf
。为了使用它,我设置了以下工具链文件,名为armv7-a20_allwinner-linux-gnueabihf.cmake
:
为 ARM 版本使用不同的构建目录,CMake 应该选择指向 ARM 根文件系统的正确路径,这是目标板 SD 卡上的内容的副本:
请注意,显然 CMake 运行良好,因为找到的路径都是相对于 ARM 根文件系统的:
但是在运行时make
它在寻找时分崩离析/usr/include/gnu/stubs.h
。如果我们尝试使用 重复make
,VERBOSE=1
我们可以看到 gcc 调用使用的是相对于主机的路径:
这里奇怪的是/usr/include/gnu/stubs.h
与ARM根文件系统无关stubs-32.h
:
但是如果你从主机系统中查看同一个文件——这是一台 x86_64 机器——我们可以猜到它为什么试图找到stubs-32.h
(记住我们正在尝试为 ARM 编译,所以它不会找到__x86_64__
符号定义):
为什么会发生这种情况,因为工具链文件明确指定仅在 CMAKE_FIND_ROOT_PATH 设置的路径中搜索库和包含?
更新(问题尚未完全解决!):
在我接受了@Tsyvarev 的答案后,我仔细检查了我的CMakeLists.txt文件,发现在尝试使其工作时,我通过手动将 CMAKE_FIND_ROOT_PATH 设置为每个编译器的前缀进行了破解,包括net返回的开关(-I) -snmp-config,这显然不是理想的做法。这与 CMAKE_SYSROOT 一起使其工作,但单独的 CMAKE_SYSROOT 本身不会为包含路径添加前缀:
snmp - SNMP 在 OID 树中找不到 OID
我用 yum 在 centos 7 上安装了 net-snmp:
我配置了 /etc/snmp/snmpd.conf 文件以查看所有 oid 树:
当我点击 snmpwalk 命令时:
它有效,但我想搜索一个特定的 oid,它是:
snmpwalk 不返回结果。
如何将此 oid 添加到 oid 树中?