问题标签 [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.
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?
windows - 我应该如何测试 WinSNMP 中的 PDU 是否太大?
我正在使用 Microsoft WinSNMP API为 Windows 应用程序构建 SNMP 代理。目前,一切都适用于单项get
和set-request
,也适用get-next
于允许行走定义的树(尽管有一些与此问题无关的警告)。
我现在正在研究多项目get
和get-bulk
.
我目前的程序是遍历请求的项目列表(varbindlist
PDU 中的),单独处理每个项目,有效地导致内部get
. 结果添加到 VBL,设置到 PDU,然后发送回 SNMP 管理器,考虑到无效请求等。
我的问题是我应该如何处理“太多”数据(无法放入单个传输层消息的数据)?或者更准确地说,有没有办法在不实际尝试传输的情况下测试数据是否“太大”?我在 API 中看到的唯一方法是尝试发送,检查错误,然后重试。
在这种情况下,get-request
这不是问题 - 如果您无法返回所有请求的数据,您将失败:因此尝试发送,如果错误报告为SNMPAPI_TL_PDU_TOO_BIG
,则发送默认的“错误”PDU。
但是,允许响应bulk-get
返回部分结果。
我能看到处理此问题的唯一方法是删除项目并重试的繁琐(?)循环。类似于以下内容(为简洁起见,删除了一些细节):
这似乎不是一种最佳方法 - 那么我错过了另一种方法吗?
作为旁注,我知道诸如 net-snmp 之类的库,但我的问题是针对 Microsoft API 的。
c++ - WinSnmp 响应消息始终在 V1 中
我正在使用 WinSnmp 创建一个 C++ 应用程序来管理 Windows 上的 SNMP 代理。它工作得很好,但我发送的所有“响应”消息都在 V1 (0) 中,尽管我设置了 SNMPAPI_UNTRANSLATED_V2 转换模式并且 GET 请求在 V2 中。我不明白为什么,也不知道如何强制版本V2。
我的代码:
接收和发送的 UDP 数据包的内容(使用 Wireshark):
如果有人有想法。谢谢 !
c++ - lpClientData参数中的C++ WinSnmp回调函数和对象地址
我的 c++ 类使用 WinSnmp 从设备获取整数值。会话初始化如下:
因此,我在回调函数中接收类对象的地址,即使用它来调用该对象的方法:
如您所见,如果类的用户(在本例中为 I)在回调函数完成其工作之前删除了类对象,则可能导致“访问冲突”。我怎样才能解决这个问题?Sleep() 看起来很难看。{pointer;session id} 结构数组看起来有点有趣,但我不确定它是否是最佳选择。
PS请原谅我的英语。
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”的实例并用数据填充它?
谢谢。
sockets - 如何使用 WinSNMP 捕获和转发 SNMP 消息?
我对 SNMP/WinSNMP 相当陌生,我正在尝试访问在端口 161/162 上接受 SNMP 流量并将其转发到另一台设备所需的内容。我希望能够检查消息并可能在将它们传递给设备之前对其进行修改。
WinSNMP 代理 API 是否适合它?是否有任何示例如何在 C++ 中完成此操作?
我会很感激任何指示。谢谢。
c++ - 无法使用 WinSNMP API 接收 SNMP 陷阱
我正在用 WinSNMP 编写一个简单而小型的 SNMP 管理器程序。但它无法接收陷阱事件......有人可以帮助我吗?
这是示例代码:
我尝试了其他使用窗口通知的方法。但它没有用。
我尝试使用 PowerShell 事件验证此代码。打开 evntwin,添加 PowerShell 事件。(ID:400/401/402/403) 为了引发陷阱事件,我启动了 PowerShell 并退出。SNMP 服务和陷阱服务正在运行。并且上面代码中的循环过程正在运行。但示例程序无法接收任何陷阱。* Snmpb 等其他管理器可以接收陷阱。
visual-c++ - 如何解决 SNMPAPI_NOOP 错误?
我是新来的,但我希望能找到我的问题的答案。我应该编写一个 WinSNMP 应用程序,我已经了解了该过程是如何进行的,并且我的代码在接收消息之前工作正常。
这是我得到错误的代码的一部分。
如果需要,我可以提供更多代码。