我正在尝试使用 SNMP 从打印机获取数据。如果我关闭打印机然后再打开,我需要获取
的 OID 是 .1.3.6.1.2.1.43.18.1.1.8.1.1
。每次打印机发生“事件”,例如暂停、缺纸或卡纸时,我想要的数据的 OID 都会递增。
例如,我打开打印机并查询 .1.3.6.1.2.1.43.18.1.1.8.1.1.
,我得到“暂停”作为值。我取消暂停打印机并从打印机中取出所有纸张,要获得“添加纸张”消息,我必须查询 .1.3.6.1.2.1.43.18.1.1.8.1.2
。
我不知道这是否是正常的 SNMP 行为,但我想知道人们建议我在这些情况下如何以编程方式获取打印机状态?
最佳答案
是的,您从警报表中检索行是正常的:
看看mib :
mib对应的文本部分为(from RFC 1759):
prtAlertTable OBJECT-TYPE
SYNTAX SEQUENCE OF PrtAlertEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
""
::= { prtAlert 1 }
prtAlertEntry OBJECT-TYPE
SYNTAX PrtAlertEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Entries may exist in the table for each device
index who's device type is `printer'."
INDEX { hrDeviceIndex, prtAlertIndex }
::= { prtAlertTable 1 }
PrtAlertEntry ::= SEQUENCE {
prtAlertIndex Integer32,
prtAlertSeverityLevel INTEGER,
prtAlertTrainingLevel INTEGER,
prtAlertGroup INTEGER,
prtAlertGroupIndex Integer32,
prtAlertLocation Integer32,
prtAlertCode INTEGER,
prtAlertDescription OCTET STRING,
prtAlertTime TimeTicks
}
所以 SNMP 的工作方式是给 MIB 的 OID 条目加上行的索引作为后缀。您可以通过 Get-Bulk 获取整个表,但我认为您首先要了解如何检索 SNMP 表。
在您的确切情况下:1.3.6.1.2.1.43.18.1.1.8.1.1
您必须将其解读为:
1.3.6.1.2.1.43.18.1.1.8
:prtAlertDescription 后跟
1
: hrDeviceIndex 后跟
1
: 行的 prtAlertIndex。
您可以找到一个名为 snmpsharpnet 的程序集的建议这对于在 .NET 之上使用 SNMP 非常有帮助。
关于c# - 处理递增的 SNMP OID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5966696/