SNMP для локального принтера? - PullRequest
11 голосов
/ 30 апреля 2010

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

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

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

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

Возможно ли это? Спасибо

Ответы [ 3 ]

16 голосов
/ 09 мая 2010

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

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

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

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

EDIT

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

альтернативный текст http://www.dependencywalker.com/snapshot.png

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

альтернативный текст http://corypeters.net/wp-content/uploads/netReflector.gif

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

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

4 голосов
/ 01 мая 2010

Вы можете получить довольно много информации о принтерах через 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

0 голосов
/ 06 мая 2010

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

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

...