Получить состояние принтера с помощью 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 и значения на вашем принтере, и если вы каким-то образом понимаете, какие значения вам нужны, вы можете использовать их для конкретного экземпляра вашего принтера.

Другие вопросы по тегам