问题标签 [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.

0 投票
0 回答
547 浏览

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 地址

谢谢。

0 投票
1 回答
102 浏览

ping - 支持 IPv6 地址的 SNMP ping

IPv6 地址是否支持“SNMP ping”?还有最新的 NET-SNMP 库是否提供对“SNMP ping”的支持。RFC 4560 谈到了 snmp ping,但没有提到任何关于 IPv6 地址的内容。 https://www.rfc-editor.org/rfc/rfc4560

谢谢-拉维

0 投票
1 回答
843 浏览

linux - snmpd.conf + snmp 配置

我有以下snmpd.conf(这个文件是所有 125 linux redhat 机器上的同一个文件,版本 5、6、7)

在文件中我还有一行 - /usr/lib64/libcmaX64.so

但文件

实际上并不存在于我们所有的机器上!

那么,从 snmpd.conf 文件中删除这一行是否安全?

第二

-dlmod cmaX是什么意思.....

0 投票
1 回答
1641 浏览

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_mrdsnmpmainbash 脚本替换。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 脚本相同,但我得到相同的空输出。

最后,我的问题

  1. 为什么 bash 脚本在这两种情况下的行为会有所不同?
  2. 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如下,除非我遗漏了什么,否则它似乎没有提供任何提示:

0 投票
1 回答
2491 浏览

php - 具有除端口 161 以外的其他端口的 snmpget() 不起作用

我试图通过以下来源获取 snmp 设备的名称。

我只获得通过端口 161 访问的第一个 snmpget() 方法的输出。其他 snmpget() 不起作用。根据研究 161 是默认端口。但是我需要为不同的 IP 地址设置不同的端口。让我知道如何为 net-snmp 设置其他端口选项

0 投票
1 回答
630 浏览

c - Net-SNMP 自定义 MIB 处理程序

我想为此 mib 创建自定义 MIB 和自定义控制器。我使用Net-SNMP代理设备是snmpd安装在它上面的基于 Debian 的 Linux 机器。我创建了模板.c.h使用mib2c. 此时,我不知道如何处理这些生成的文件?我想在我的应用程序中处理一些(我在 MIB 中创建的)SNMP 请求Clang。所以基本上,如果我将生成的源代码复制mib2c到我的C项目中,它会起作用吗?我不需要将这些处理程序注册到 snmpd 吗?

我遵循了本教程,但它专注于编写代码。它没有提到编译和执行。

0 投票
1 回答
585 浏览

snmp - 为什么在执行 snmpset 命令时出现这些错误?

snmpset -OQ -v 2c -c SNMPv2-MIB::ocStbHostRebootReset.0 i = 1

上面写的是我在腻子中执行的代码,因为我必须重新启动盒子,所以对于真实值,我给出 i=1。

但是执行此操作后我遇到了错误

snmpset:未知主机(SNMPv2-MIB::ocStbHostRebootReset.0)(没有这样的文件或目录)

0 投票
0 回答
844 浏览

docker - Docker 在尝试重新启动时运行返回“snmpd 既不是服务也不是目标!?”

我是 Docker 新手。我尝试在 opensuse13.2 docker 映像上安装 snmpd。安装完成。Docker 构建执行得很好。但是当尝试重新启动或检查 snmpd 服务的状态时,我遇到了错误

“snmpd 既不是服务也不是目标!?”

我的 Dockerfile:

入口点.sh:

Docker 构建输出:

难道我做错了什么?
有人可以帮我吗?提前致谢。

0 投票
3 回答
1975 浏览

linux - 尽管使用了适当的工具链文件,但为什么 CMake 在交叉编译 Net-SNMP 代理时显然是指主机系统文件?

我正在开发一个Net-SNMP子代理,其最终目标是 ARM 板,因此我使用CMake来更轻松地管理构建本机和交叉编译版本。我开始在我的主机平台 (x86_64) 上对其进行测试,它可以与这个CMakeLists.txt文件一起构建并正常工作:

我使用单独的构建目录,所以我不混合构建和源文件,它们与CMakeLists.txt文件一起保留,所以这些命令的输出......

...如下:

运行make,它构建得很好:

snmp_agent作为 agentX 子代理运行,连接到主主代理并正确回答针对标量对象的snmpdSNMP 请求。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。如果我们尝试使用 重复makeVERBOSE=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 本身不会为包含路径添加前缀:

0 投票
1 回答
1634 浏览

snmp - SNMP 在 OID 树中找不到 OID

我用 yum 在 centos 7 上安装了 net-snmp:

我配置了 /etc/snmp/snmpd.conf 文件以查看所有 oid 树:

当我点击 snmpwalk 命令时:

它有效,但我想搜索一个特定的 oid,它是:

snmpwalk 不返回结果。

如何将此 oid 添加到 oid 树中?