我尝试使用SNMP协议从我的打印机获取状态 问题是,我从未使用过SNMP,而且我无法理解如何获得我的状态(PAPER OUT,RIBBON OUT等)。
我将打印机配置为使用社区名称" public"
启用SNMP协议
我假设SNMP消息是在端口161上发送的
我正在使用Pysnmp,因为我想在我的程序中集成python脚本来监听我的打印机并在打印机出现问题时显示状态。
目前我已尝试过此代码:
import socket
import random
from struct import pack, unpack
from datetime import datetime as dt
from pysnmp.entity.rfc3413.oneliner import cmdgen
from pysnmp.proto.rfc1902 import Integer, IpAddress, OctetString
ip = '172.20.0.229'
community = 'public'
value = (1,3,6,1,2,1,25,3,5,1,2)
generator = cmdgen.CommandGenerator()
comm_data = cmdgen.CommunityData('server', community, 1) # 1 means version SNMP v2c
transport = cmdgen.UdpTransportTarget((ip, 161))
real_fun = getattr(generator, 'getCmd')
res = (errorIndication, errorStatus, errorIndex, varBinds) \
= real_fun(comm_data, transport, value)
if not errorIndication is None or errorStatus is True:
print "Error: %s %s %s %s" % res
else:
print "%s" % varBinds
ip地址是我的打印机的ip 问题是OID:我不知道在OID领域放什么,因为我无法理解OID是如何工作的。
我找到了此页面,但我不确定它是否适合所有打印机==> click here
答案 0 :(得分:1)
在常见情况下,您需要特定于打印机的MIB文件。例如,我办公室的打印机似乎不支持您链接的两个oid。您还可以使用snmpwalk
在打印机上获取可用的oid和值,如果您以某种方式了解所需的值,则可以将其用于打印机的特定实例。