jjzjj

c# - 本地打印机的 SNMP?

coder 2024-05-29 原文

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

打印机连接USB或PPI(并口)。所有打印机都有内部 TotalPagesCount 并支持 SNMP。

这里是打印机的一些例子:

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

这可能吗?谢谢

最佳答案

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

对于您需要在特定 MIB 中搜索的其他属性,例如在 HP Laserjet MIB 中您有很多东西,例如打印介质使用量、打印介质单面打印计数、打印介质双面打印计数、使用平均墨粉覆盖率、扫描介质使用量、总颜色-页数.....

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

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

编辑

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


(来源:dependencywalker.com)

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


(来源:corypeters.net)

有一本涵盖这些方面的好书叫做 Reversing: Secrets of Reverse Engineering

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

关于c# - 本地打印机的 SNMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2744499/

有关c# - 本地打印机的 SNMP?的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  3. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  4. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  5. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  6. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  7. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

  8. ruby - 如何打印 ruby​​ 对象的实例变量 - 2

    classPacketdefinitialize(name,age,number,array)@name=name@age=age@number=number@neighbors=arrayendendp1=Packet.new("n1",5,2,[1,2,3,4])putsp1.name我有上面的代码,但是每当我执行puts语句时,我都会收到nameisnotamethod的错误。我不知道任何其他方式来打印p1的名称。如何打印姓名? 最佳答案 这里的问题是,虽然您拥有实例变量,但您并未使它们可访问。attr_reader:vari

  9. ruby - 如何打印出 Mechanized 存储的 cookie? - 2

    我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject

  10. ruby - 如何捕获所有 HTTP 流量(本地代理) - 2

    我希望访问我机器上的所有HTTP流量(我的Windows机器-不是服务器)。据我了解,拥有一个本地代理是所有流量路线的必经之路。我一直在谷歌搜索但未能找到任何资源(关于Ruby)来帮助我。非常感谢任何提示或链接。 最佳答案 WEBrick中有一个HTTP代理(Rubystdlib的一部分)和here's一个实现示例。如果你喜欢生活在边缘,还有em-proxy伊利亚·格里戈里克。这postIlya暗示它似乎确实需要一些调整来解决您的问题。 关于ruby-如何捕获所有HTTP流量(本地代理)

随机推荐