【问题标题】:SNMP for Local printer?本地打印机的 SNMP?
【发布时间】:2010-04-30 12:35:22
【问题描述】:

我正在寻找一种从本地打印机获取信息的方法。也许使用 SNMP 协议?

打印机通过 USB 或 PPI(并行端口)连接。所有打印机都有一个内部 TotalPagesCount 并支持 SNMP。

以下是打印机的一些示例:

  • 兄弟HL1430
  • 兄弟HL5150
  • 兄弟HL1230
  • 京瓷1118
  • 京瓷1128
  • 京瓷2000
  • 京瓷1300
  • 京瓷3920
  • 京瓷 1920
  • 京瓷1350

这可能吗?谢谢

【问题讨论】:

  • 这太模糊了,无法有意义地回答。请至少提供:什么打印机型号?您在寻找什么信息?你想用这些信息做什么?
  • 另外,“与PPI连接”是什么意思? PPI是接口吗?我从来没听说过。请拼出问题中的所有缩写,除非它们很常见(例如 USB :-))。
  • 打印机来自 Kyocera、HP 或 Brother。我不能说出具体型号...。我查找碳粉状态、printedPages 和序列号。我想在列表框中或类似的东西中列出信息。 PPI 是并行端口。

标签: c# vb.net snmp


【解决方案1】:

我认为 SNMP 是正确的方法。大多数打印机都实现了standard printer MIBRFC 1213 MIB,因此您可以从那里获得的任何属性都将与模型无关。例如,如果您查找序列号,您的属性可能是 prtGeneralSerialNumber 1.3.6.1.2.1.43.5.1.1.17

对于您需要在特定 MIB 中搜索的其他属性,例如在 HP Laserjet MIB 中,您有很多东西,例如 printed-media-usage、printed-media-simplex-count、printed -media-duplex-count、usage-average-toner-coverage、scanned-media-usage、total-color-page-count.....

要使用 SNMP,最扩展的库是 Net-SNMP,但它使用 C API,如果您需要在繁重的多线程应用程序中使用它或使用 SNMPv3,我不推荐它。还有像 link text 这样的其他库看起来很有前途,但大多数可靠的库都是商业的,而且不是很便宜。

如果打印机连接网络,上述所有操作都非常容易实现,现在如果打印机连接 USB 或 PPI,您需要动手使用 HP SNMP 代理,您可以找到一个很棒的帖子here。 它说它基本上是一个小型 Windows 软件,搭载标准 Windows SNMP 服务,并在通过 USB 或并行电缆连接到计算机的默认 HP 打印机上提供 SNMP 数据。我不知道它是否适用于任何其他品牌,但看起来它使用标准协议 DOT4 over USB 来模拟典型的 TCP/IP 通信。如果有任何标准方法可以连接到所有这些打印机,那么这个是最有前途的。 我能想到的另一种方法是破解每个模型的各个驱动程序,以查看它们是否提供此类信息(肯定会提供)并分别调用它们以获取它,但在这项任务中,我认为您正在你自己的。

编辑

对于驱动程序黑客,我的意思是逆向工程可能是每个驱动程序的工具。例如,如果打印机有一个显示碳粉状态的实用程序尝试了解它是如何工作的,我会开始使用Depends 打开可执行文件并查看它正在使用哪些 dll 以及它们发布的方法,如果你找到了一个方法像 dll 中的 GetTonerStatus 一样值得尝试使用它。


(来源:dependencywalker.com

如果该工具是用 .Net 编写的,那就容易多了,因为你可以通过反编译来访问源代码(我不知道这种方法的法律问题)。用reflector来做,你会看得一清二楚。


(来源:corypeters.net

有一本很棒的书涵盖了这方面的内容,叫做Reversing: Secrets of Reverse Engineering

如前所述,这是一条漫长的道路,但可能是实现您想要做的唯一的道路,您可能需要在调查一下我提到的主题后重新考虑项目的可行性。

【讨论】:

  • 虽然它不是一个公共标准,但很高兴知道一些供应商试图将 SNMP 用于更多堆栈。但是是的,它取决于供应商,可能不适用于所有型号。
  • 感谢您这么长的回答。 ......你有没有关于驱动程序黑客的链接?我认为代理对我来说不是正确的解决方案,因为我看不到它是如何工作的,也无法构建自己的应用程序来监控打印机。
  • 我认为我上次的编辑涵盖了我在这个主题上能做的所有事情,没有更多信息我没有更多的想法
  • 好的,谢谢。这不是 .Net 程序集 :( 你需要什么信息?
【解决方案2】:

您可以通过 WMI 获取大量有关打印机的信息,但我不确定它是否包含您要查找的信息:
http://msdn.microsoft.com/en-us/library/Aa394363

我认为 HP 打印机将其序列号存储在此注册表项下的某个位置(可能是称为身份或类似名称的键):
HKEY_LOCAL_MACHINE\SOFTWARE\惠普\

我从未使用过 SNMP,但我记得如果你走这条路可能会用到这个库:
http://www.codeproject.com/KB/cs/SNMPDLL.aspx

【讨论】:

    【解决方案3】:

    SNMP 标准不支持 USB 或其他连接类型。它仅支持以太网上的 TCP/IP 堆栈。因此,答案应该是“否”或“不可能”。

    但我们确实看到一些公司在其他网络/连接类型上实施 SNMP。但是,这种定制不是标准化的,您不能使用标准 MIB 浏览器等进行 SNMP 查询。

    【讨论】:

    • 我没有说我想使用 SNMP。我正在寻找一种通过 USB 或 PPI(如 SNMP)获取信息的方法。
    • 虽然这是现实的一部分,但并不总是完全正确,大多数打印机都实现标准打印机 MIB,并且有一个代理可以通过 USB 执行 SNMP。看我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2018-02-28
    相关资源
    最近更新 更多