使用Pysnmp通过SNMP获取打印机状态

时间:2016-08-31 09:50:35

标签: python snmp zebra

我尝试使用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

1 个答案:

答案 0 :(得分:1)

在常见情况下,您需要特定于打印机的MIB文件。例如,我办公室的打印机似乎不支持您链接的两个oid。您还可以使用snmpwalk在打印机上获取可用的oid和值,如果您以某种方式了解所需的值,则可以将其用于打印机的特定实例。