Получить состояние принтера с помощью SNMP с помощью Pysnmp
Я пытаюсь получить статус с моего принтера по протоколу SNMP. Проблема в том, что я никогда не использовал SNMP, и у меня возникают проблемы с пониманием, как я могу получить свой статус ( PAPER OUT, RIBBON OUT и т. Д...).
Я настроил свой принтер для включения протокола SNMP, используя имя сообщества "public"
Я предполагаю, что сообщения 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.
Я нашел эту страницу, но я не уверен, что она подходит для всех принтеров ==> нажмите здесь
1 ответ
Вам нужен файл MIB вашего принтера в общем случае. Например, принтер в моем офисе, кажется, не поддерживает обе ссылки по вашей ссылке. Также вы можете использовать snmpwalk
чтобы получить доступные значения oids и значения на вашем принтере, и если вы каким-то образом понимаете, какие значения вам нужны, вы можете использовать их для конкретного экземпляра вашего принтера.