我正在尝试使用SNMP从打印机获取数据。如果我打开和关闭打印机,get
所需的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行为,但我想知道在这些情况下人们建议我能以编程方式获取打印机状态吗?
答案 0 :(得分:4)
是的,您正在从警报表中检索行是正常的:
看看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非常有帮助。
答案 1 :(得分:1)
看起来您的打印机正在存储状态列表。您必须从OID .1.3.6.1.2.1.43.18.1.1.8.1.1开始批量处理并使用该组中的最后一个变量绑定。