SNMP для локального принтера?

Я ищу способ получить информацию с локального принтера. Может быть, с протоколом SNMP?

Принтер подключен к USB или PPI (параллельный порт). Все принтеры имеют внутренний TotalPagesCount и поддерживают SNMP.

Вот несколько примеров принтеров:

  • Brother HL1430
  • Брат HL5150
  • Brother HL1230
  • Kyocera 1118
  • Kyocera 1128
  • Kyocera 2000
  • Kyocera 1300
  • Kyocera 3920
  • Kyocera 1920
  • Kyocera 1350

Возможно ли это? Благодаря

Ответ 1

Я думаю, что SNMP - правильный подход. Большинство принтеров реализуют стандартный принтер MIB и RFC 1213 MIB, поэтому любое свойство, которое вы можете получить, будет независимым от модели. Например, если вы ищете серийный номер, ваше свойство, вероятно, prtGeneralSerialNumber 1.3.6.1.2.1.43.5.1.1.17

Для других свойств вам нужно будет искать в определенных MIB, например, в HP Laserjet MIB у вас есть много таких вещей, как использование печатных носителей, число печатных носителей, число симплексных, печатные -media-duplex-count, средняя загрузка тонера, использование отсканированных носителей, общее количество страниц в цвете.....

Чтобы использовать SNMP, наиболее расширенной библиотекой является Net-SNMP, но она использует API C, и я не рекомендую ее использовать, если вам нужно использовать ее в многопоточных приложениях или при использовании SNMPv3. Есть и другие библиотеки, такие как текст ссылки, которые выглядят очень многообещающе, но большинство надежных библиотек там коммерческие и не очень дешевые.

Все вышеперечисленное довольно легко реализовать, если принтер подключен к сети, теперь, если принтер подключен через USB или PPI, вам нужно заполучить агента HP SNMP Proxy Agent, вы можете найти отличное сообщение здесь. В нем говорится, что в основном это небольшое программное обеспечение Windows, которое поддерживает стандартную службу Windows SNMP и предоставляет данные SNMP на принтере HP по умолчанию, подключенном к компьютеру через USB или параллельный кабель. Я не знаю, работает ли он с другими брендами, но похоже, что он использует стандартный протокол DOT4 через USB для эмуляции типичной связи TCP/IP. Если есть какой-либо стандартный способ подключения ко всем этим принтерам, этот вариант является наиболее перспективным. Еще один метод, который я могу придумать, - это взломать отдельные драйверы каждой модели, чтобы увидеть, предоставляют ли они такую информацию (что, безусловно, делают), и сделать соответствующие обращения к ним, чтобы получить ее, но в этой задаче я думаю, что вы на свой собственный.

EDIT

Под взломом драйвера я подразумеваю реверс-инжиниринг, вероятно, инструментов каждого драйвера. Например, если у принтера есть утилита, показывающая состояние тонера, попытайтесь понять, как он работает, я бы начал использовать Зависит от, чтобы открыть исполняемый файл и посмотреть, какие библиотеки он использует и какие методы они публикуют, если в dll вы найдете такой метод, как GetTonerStatus, который стоит попробовать.

alt text
(источник: dependencywalker.com)

Если инструмент написан на .Net, это намного проще, потому что у вас может быть доступ к исходному коду путем его декомпиляции (я не знаю о юридических проблемах этого метода). Используйте отражатель, чтобы сделать это, и вы увидите это ясно.

alt text
(источник: corypeters.net)

Существует замечательная книга, посвященная этим аспектам, которая называется Реверс: Секреты обратного инжиниринга

.Как уже говорилось, это долгий путь, но, вероятно, единственный, который позволит вам достичь того, что вы хотите сделать, вы можете пересмотреть жизнеспособность проекта после небольшого изучения упомянутых мною тем.

Ответ 2

Вы можете получить довольно много информации о принтерах через WMI, хотя я не уверен, содержит ли она информацию, которую вы ищете:
http://msdn.microsoft.com/en-us/library/Aa394363

Я думаю, что принтеры HP хранят свои серийные номера где-то в этом разделе реестра (возможно, ключ называется идентификатором или похожим):
HKEY_LOCAL_MACHINE\SOFTWARE\Hewlett-Packard\

Я никогда не использовал SNMP, хотя я вспомнил эту библиотеку, которая может быть полезной, если вы спуститесь по этому маршруту:
http://www.codeproject.com/KB/cs/SNMPDLL.aspx

Ответ 3

Стандарт SNMP не поддерживает USB или другие типы соединений. Он поддерживает только протокол TCP/IP через Ethernet. Поэтому ответ должен быть НЕТ или невозможным.

Но мы видим, что некоторые компании внедряют SNMP по другим типам сети/подключения. Однако такая настройка не стандартизирована, и вы не можете выполнять SNMP-запросы с использованием стандартных браузеров MIB или так далее.