问题标签 [winsnmp]

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 投票
1 回答
719 浏览

c - SnmpRegister() fails in WinSNMP

I just started with WinSNMP (in Visual Studio 2005), and have written the following code. (This is a snippet.)

CallBackFunction is defined as:

m_pSrcEntity, m_pDstEntity, m_pContext are NULL in the example. WM_SNMP_TEST has been registed by me as a Windows Message.

The first ASSERT succeeds. m_SnmpSession gets the value 0x00000001 when the SnmpCreateSession() is called, so second ASSERT also succeeds. Is that normal? I mean can the session have the mentioned value? Then the SnmpRegister() fails and SnmpGetLastError() returns 1. My Windows SNMP and SNMP Trap services are running. What am I doing wrong?

0 投票
1 回答
846 浏览

windows - 我应该如何测试 WinSNMP 中的 PDU 是否太大?

我正在使用 Microsoft WinSNMP API为 Windows 应用程序构建 SNMP 代理。目前,一切都适用于单项getset-request,也适用get-next于允许行走定义的树(尽管有一些与此问题无关的警告)。

我现在正在研究多项目getget-bulk.

我目前的程序是遍历请求的项目列表(varbindlistPDU 中的),单独处理每个项目,有效地导致内部get. 结果添加到 VBL,设置到 PDU,然后发送回 SNMP 管理器,考虑到无效请求等。

我的问题是我应该如何处理“太多”数据(无法放入单个传输层消息的数据)?或者更准确地说,有没有办法在不实际尝试传输的情况下测试数据是否“太大”?我在 API 中看到的唯一方法是尝试发送,检查错误,然后重试。

在这种情况下,get-request这不是问题 - 如果您无法返回所有请求的数据,您将失败:因此尝试发送,如果错误报告为SNMPAPI_TL_PDU_TOO_BIG,则发送默认的“错误”PDU。

但是,允许响应bulk-get返回部分结果。

我能看到处理此问题的唯一方法是删除项目并重试的繁琐(?)循环。类似于以下内容(为简洁起见,删除了一些细节):

这似乎不是一种最佳方法 - 那么我错过了另一种方法吗?


作为旁注,我知道诸如 net-snmp 之类的库,但我的问题是针对 Microsoft API 的。

0 投票
0 回答
1464 浏览

c++ - WinSnmp 响应消息始终在 V1 中

我正在使用 WinSnmp 创建一个 C++ 应用程序来管理 Windows 上的 SNMP 代理。它工作得很好,但我发送的所有“响应”消息都在 V1 (0) 中,尽管我设置了 SNMPAPI_UNTRANSLATED_V2 转换模式并且 GET 请求在 V2 中。我不明白为什么,也不知道如何强制版本V2。

我的代码:

接收和发送的 UDP 数据包的内容(使用 Wireshark):

如果有人有想法。谢谢 !

0 投票
0 回答
304 浏览

c++ - lpClientData参数中的C++ WinSnmp回调函数和对象地址

我的 c++ 类使用 WinSnmp 从设备获取整数值。会话初始化如下:

因此,我在回调函数中接收类对象的地址,即使用它来调用该对象的方法:

如您所见,如果类的用户(在本例中为 I)在回调函数完成其工作之前删除了类对象,则可能导致“访问冲突”。我怎样才能解决这个问题?Sleep() 看起来很难看。{pointer;session id} 结构数组看起来有点有趣,但我不确定它是否是最佳选择。

PS请原谅我的英语。

0 投票
0 回答
599 浏览

c++ - C++ SNMP 扩展代理 - 如何使用 AsnSequence?

我需要的是创建 SNMP 代理来监控我们的软件系统。我正在使用“winsnmp”在 Visual C++ 中编写我的 SNMP 扩展代理。输出是 x64 DLL,它在 Windows 注册表中注册,由“SNMP 服务”加载并正确执行。我的 SNMP 代理能够处理“SNMP_PDU_GET”、“SNMP_PDU_GETNEXT”、“SNMP_PDU_SET”请求以及生成 SNMP 陷阱。到目前为止一切都很好,一切正常。

但是现在我需要处理复杂的数据类型“sequence”,它在“winsnmp”中显示为“AsnSequence”类型或“ASN_SEQUENCE”类型常量。要求是用包含多条记录的表回复 SNMP 管理器。该表具有特定的结构,这里是示例 MIB 片段:

一旦 SNMP 管理器请求整个表,代理就会收到“SNMP_PDU_GETNEXT”请求:

多变的

对于所有这些情况,“&variableBindings->list[index].value.asnType”是“ASN_NULL”。

我怀疑,产生响应“&variableBindings->list[index].value.asnType”必须用“ASN_SEQUENCE”初始化,“&variableBindings->list[index].value.asnValue.sequence”应该用“AsnSequence”初始化。

那么,我说的对吗?

如何初始化“AsnSequence”的实例并用数据填充它?

谢谢。

0 投票
1 回答
260 浏览

sockets - 如何使用 WinSNMP 捕获和转发 SNMP 消息?

我对 SNMP/WinSNMP 相当陌生,我正在尝试访问在端口 161/162 上接受 SNMP 流量并将其转发到另一台设备所需的内容。我希望能够检查消息并可能在将它们传递给设备之前对其进行修改。

WinSNMP 代理 API 是否适合它?是否有任何示例如何在 C++ 中完成此操作?

我会很感激任何指示。谢谢。

0 投票
0 回答
901 浏览

c++ - 无法使用 WinSNMP API 接收 SNMP 陷阱

我正在用 WinSNMP 编写一个简单而小型的 SNMP 管理器程序。但它无法接收陷阱事件......有人可以帮助我吗?

这是示例代码:

我尝试了其他使用窗口通知的方法。但它没有用。

我尝试使用 PowerShell 事件验证此代码。打开 evntwin,添加 PowerShell 事件。(ID:400/401/402/403) 为了引发陷阱事件,我启动了 PowerShell 并退出。SNMP 服务和陷阱服务正在运行。并且上面代码中的循环过程正在运行。但示例程序无法接收任何陷阱。* Snmpb 等其他管理器可以接收陷阱。

0 投票
0 回答
130 浏览

visual-c++ - 如何解决 SNMPAPI_NOOP 错误?

我是新来的,但我希望能找到我的问题的答案。我应该编写一个 WinSNMP 应用程序,我已经了解了该过程是如何进行的,并且我的代码在接收消息之前工作正常。

这是我得到错误的代码的一部分。

如果需要,我可以提供更多代码。