c++;如何使用snmp网络将值写入OID

c++;如何使用snmp网络将值写入OID,snmp,net-snmp,Snmp,Net Snmp,我明白这一点。 我成功地完成了所有工作,但我无法确定如何从应用程序中更改MIB标量值 我希望将应用程序中的值写入这些OID,以便能够通过SNMP监控我的应用程序 本教程将向您展示如何注册OID并为其设置值,但如何根据应用程序状态更改应用程序中的值 我的目标是: 我有自己的应用程序(简单的商业应用程序),在Ubuntu机器上运行。 我通过SNMP从远程客户端监控主机。我监视CPU、RAM之类的东西。。我通过发送snmp到这些OID来实现这一点 作为托管监控的一部分,我也想监控我的应用程序(例如re

我明白这一点。 我成功地完成了所有工作,但我无法确定如何从应用程序中更改MIB标量值

我希望将应用程序中的值写入这些OID,以便能够通过SNMP监控我的应用程序

本教程将向您展示如何注册OID并为其设置值,但如何根据应用程序状态更改应用程序中的值

我的目标是: 我有自己的应用程序(简单的商业应用程序),在Ubuntu机器上运行。 我通过SNMP从远程客户端监控主机。我监视CPU、RAM之类的东西。。我通过发送snmp到这些OID来实现这一点


作为托管监控的一部分,我也想监控我的应用程序(例如request_quoue_size),因此我认为实现这一点的方法是在这个OID上编写我自己的MIB模块并从我的应用程序中写入对set的调用,我现在正在看如何调用set(c++),如果这是一种方法。

首先,MIB只是一个接口(它指定可从MIB模块访问的所有OID)。您的应用程序是SNMP代理还是SNMP使用者

如果您在SNMP代理中,那么我假设您可以直接访问OID所在的内存

如果您在SNMP客户端中,则需要使用适当的UDP数据包向代理发送SNMP设置请求


请添加一些有关您试图实现的目标的详细信息。

首先,MIB只是一个接口(它指定可以从MIB模块访问的所有OID)。您的应用程序是SNMP代理还是SNMP使用者

如果您在SNMP代理中,那么我假设您可以直接访问OID所在的内存

如果您在SNMP客户端中,则需要使用适当的UDP数据包向代理发送SNMP设置请求


请添加一些有关您试图实现的目标的详细信息。

好的,我假设您使用的是NET-SNMP框架(纯用C编写)。如果您想为set请求生成并发送正确的UDP数据包,那么我建议您查看位于net snmp-/snmp/agent/目录中的snmpset.c文件。您有一个很好的方法来编写此功能。请注意,也有可能错误地添加MIB模块或标量(是读写吗?)-只需在Ubuntu中使用snmp set binary对该MIB执行set request,看看它是否有效。如果有效,则可以开始考虑向应用程序添加set request代码。我是否正确?这是监控我的应用程序的方法吗?我查看文件,这是他们的snmpset解析器。我将尝试模拟它。我以为他们有sim卡ple C API。我的理解是,您正在监视的SNMP代理和应用程序在同一台机器上工作。您要监视的应用程序需要更新隐藏在MIB标量后面的数据(这是最好的;其他可能性也是可行的).SNMP代理必须管理已注册MIB模块的请求。如果您的MIB模块和标量对象已正确注册/定义,那么它应该可以工作。您可以通过使用名为snmpset的NET-SNMP工具从计算机发送一个set请求来检查它,即:
snmpset-v1-cprivate:161=
。您能给我看一下标量定义吗?我不太了解代理…我只想有一个简单的标量(request_quoue_size),可以通过snmpget从远程监控。为了实现这一点,我可能会选择错误的路径或复杂的路径(如果我做错了,请纠正我)。我遵循链接中的教程。编写我自己的mib模块,如链接中的解释(现在只是演示)。通过命令行设置此OID可以工作。但我希望simple C API更改该值。假设您已在SNMP代理中正确定义并注册该标量(换句话说,代理知道该OID并理解语法,这是值的编码/解码方式),然后请使用snmpset.c中的代码。在那里和使用的头文件中,您将找到您正在请求的c API。另一种更简单,但不是很好的方法是从c/c++应用程序中调用snmpset/snmpget shell命令作为系统调用,并将命令输出放在文件中进行解析例程…好的,我假设您使用的是NET-SNMP框架工作(纯用C编写)。如果您想为set请求生成并发送正确的UDP数据包,那么我建议您查看位于net snmp-/snmp/agent/目录中的snmpset.C文件。您有一个很好的方法来编写此功能。请注意,也有可能错误地添加了MIB模块或标量(它是读写的吗?)-只需在Ubuntu中使用snmp set binary对该MIB执行set request,看看它是否有效。如果有效,则可以开始考虑向应用程序添加set request代码。我是否正确?这是监控我的应用程序的方法吗?我查看文件,这是他们的snmpset解析器。我将尝试模拟它。我以为他们有sim卡ple C API。我的理解是,您正在监视的SNMP代理和应用程序在同一台机器上工作。您要监视的应用程序需要更新隐藏在MIB标量后面的数据(这是最好的;其他可能性也是可行的).SNMP代理必须管理已注册MIB模块的请求。如果您的MIB模块和标量对象已正确注册/定义,那么它应该可以工作。您可以通过使用名为snmpset的NET-SNMP工具从计算机发送一个set请求来检查它,即:
snmpset-v1-cprivate:161=
。您能给我看一下标量定义吗?我不太了解代理…我只想有一个简单的标量(request_quoue_size),可以通过snmpget从远程监控。为了实现这一点,我可能会选择错误的路径或复杂的路径(如果我做错了,请纠正我)。我遵循链接中的教程。编写我自己的mib模块,如链接中的解释(现在只是演示).通过命令行设置为这个OID工作。但是我要知道我想要简单的C API来