文档章节

通过SNMP获取打印机状态

子木007
 子木007
发布于 2016/03/08 12:17
字数 653
阅读 229
收藏 0
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.*;
import org.snmp4j.transport.DefaultUdpTransportMapping;

import java.io.IOException;
import java.util.Vector;

/**
 * Name	 hrDeviceStatus
 * OID	     .1.3.6.1.2.1.25.3.2.1.5.1
 * MIB	     HOST-RESOURCES-MIB
 * Syntax	 INTEGER {unknown(1), running(2), warning(3), testing(4), down(5)}
 * Access	 read-only
 * Status	 current
 * Descr	 The current operational state of the device described
 * by this row of the table.  A value unknown(1)
 * indicates that the current state of the device is
 * unknown.  running(2) indicates that the device is up
 * and running and that no unusual error conditions are
 * known.  The warning(3) state indicates that agent has
 * been informed of an unusual error condition by the
 * operational software (e.g., a disk device driver) but
 * that the device is still 'operational'.  An example
 * would be a high number of soft errors on a disk.  A
 * value of testing(4), indicates that the device is not
 * available for use because it is in the testing state.
 * The state of down(5) is used only when the agent has
 * been informed that the device is not available for any
 * use.
 * <p/>
 * ------------------------------------------------
 * <p/>
 * Name	 hrPrinterStatus
 * OID	     .1.3.6.1.2.1.25.3.5.1.1.1
 * MIB	     HOST-RESOURCES-MIB
 * Syntax	 INTEGER {other(1),unknown(2),idle(3),printing(4),warmup(5)}
 * Access	 read-only
 * Status	 current
 * DefVal
 * Indexes	 hrDeviceIndex
 * Descr	 The current status of this printer device.
 * <p/>
 * ------------------------------------------------
 * <p/>
 * Name	 hrPrinterDetectedErrorState
 * OID	     .1.3.6.1.2.1.25.3.5.1.2.1
 * MIB	     HOST-RESOURCES-MIB
 * Syntax	 OCTET STRING
 * Access	 read-only
 * Status	 current
 * DefVal
 * Indexes	 hrDeviceIndex
 * Descr	 This object represents any error conditions detected
 * by the printer.  The error conditions are encoded as bits in an octet string, with the following definitions:
 * Condition         Bit #
 * lowPaper              0
 * noPaper               1
 * lowToner              2
 * noToner               3
 * doorOpen              4
 * jammed                5
 * offline               6
 * serviceRequested      7
 * inputTrayMissing      8
 * outputTrayMissing     9
 * markerSupplyMissing  10
 * outputNearFull       11
 * outputFull           12
 * inputTrayEmpty       13
 * overduePreventMaint  14
 * Bits are numbered starting with the most significant
 * bit of the first byte being bit 0, the least
 * significant bit of the first byte being bit 7, the
 * most significant bit of the second byte being bit 8,
 * and so on.  A one bit encodes that the condition was
 * detected, while a zero bit encodes that the condition
 * was not detected.
 * This object is useful for alerting an operator to
 * specific warning or error conditions that may occur,
 * especially those requiring human intervention.
 */

public class SnmpPrinter {


    private Snmp snmp = null;
    private UdpAddress targetAddress = null;
    private static int DEFAULT_PORT = 161;
    private CommunityTarget target;

    public static final String OID_DEVICE_STATUS = "1.3.6.1.2.1.25.3.2.1.5.1";
    public static final String OID_PRINTER_STATUS = "1.3.6.1.2.1.25.3.5.1.1.1";
    public static final String OID_ERROR_STATUS = "1.3.6.1.2.1.25.3.5.1.2.1";

    public SnmpPrinter(String ip) throws IOException {
        this(ip, DEFAULT_PORT);
    }

    public SnmpPrinter(String ip, int port) throws IOException {
        // 设置Agent的IP和端口
        snmp = new Snmp(new DefaultUdpTransportMapping());
        snmp.listen();
        targetAddress = new UdpAddress(String.format("%s/%s", ip, port));
        connTarget();
    }

    public void close() throws IOException {
        snmp.close();
    }

    private void connTarget() {
        target = new CommunityTarget();
        target.setCommunity(new OctetString("public"));
        target.setAddress(targetAddress);
        // 通信不成功时的重试次数
        target.setRetries(3);
        // 超时时间
        target.setTimeout(1500);
        target.setVersion(SnmpConstants.version1);
    }

    private String getPDU(String oid) throws IOException {
        // 创建 PDU
        PDU pdu = new PDU();
        pdu.add(new VariableBinding(new OID(oid)));
        // MIB的访问方式
        pdu.setType(PDU.GET);
        // 向Agent发送PDU,并接收Response
        ResponseEvent respEvnt = snmp.send(pdu, target);
        // 解析Response
        StringBuilder buf = new StringBuilder();
        if (respEvnt != null && respEvnt.getResponse() != null) {
            Vector<? extends VariableBinding> recVBs = respEvnt.getResponse().getVariableBindings();
            // 可能多值,简单拼接
            for (int i = 0, s = recVBs.size(); i < s; i++) {
                VariableBinding recVB = recVBs.elementAt(i);
                buf.append(recVB.getVariable());
                if (i < s - 1) {
                    buf.append(" , ");
                }
            }
        }
        return buf.toString();
    }

    public String getDeviceStatus() throws IOException {
        return getPDU(OID_DEVICE_STATUS);
    }

    public String getPrinterStatus() throws IOException {
        return getPDU(OID_PRINTER_STATUS);
    }

    public String getErrorStatus() throws IOException {
        return getPDU(OID_ERROR_STATUS);
    }

    public static void main(String[] args) throws IOException {
        SnmpPrinter util = new SnmpPrinter("192.168.0.12");
        System.out.println(util.getDeviceStatus());
        System.out.println(util.getPrinterStatus());
        System.out.println(util.getErrorStatus());
        util.close();
    }
}


© 著作权归作者所有

共有 人打赏支持
子木007

子木007

粉丝 75
博文 6
码字总数 947
作品 0
徐汇
私信 提问
zabbix专题:第十一章 zabbix之SNMP方式监控

zabbix专题:第十章 zabbix之SNMP方式监控 (SNMP基本都是监控网络设备,本文介绍点理论知识) 概述 如果我们需要监控打印机、路由器、UPS等设备,肯定不能使用zabbix agentd,因为他们不能安装...

好笔记运维
2018/06/26
0
0
5款监控利器介绍(smokeping、cacti、nagios、zabbix、ntop)

smokeping Smokeping 是rrdtool 的作者Tobi Oetiker 的作品,是用Perl 写的,主要是监视网络性能,包括常规的ping,用echoping监控www 服务器性能,监视dns 查询性能,监视ssh 性能等。底层也...

Jack崔
2017/07/27
0
0
监控工具之NAGIOS的配置与应用(centos7)

一、什么是nagios Nagios 是一款开源的免费网络监控报警服务,能有效监控 Windows、Linux 和 Unix 的主机状态以及交换机、路由器和防火墙等网络设置,还有打印机、网络投影、网络摄像等设备。...

zzc052
2018/06/29
0
0
我是如何黑掉惠普打印机的

步骤 首先,我有机会测试惠普Officejet Pro系列打印机 其次,我决定测试它的安全性并用本地无线网络连接做一次扫描。 注:所有的安装步骤都是按照惠普说明手册安装的 信息泄漏 我在HP打印机的...

广岛秋泽
2015/09/01
0
0
Zabbix SNMP监控安装、配置与服务器实例(学习笔记六)

SNMP可以监控路由器、打印机、UPS、摄像头、服务器等。 1、安装、配置snmp yum install net-snmp* -y # vim /etc/snmp/snmpd.conf view systemview included .1.3.6.1.2.1.25.1.1 //找到这行...

sktj
2018/04/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

精品书籍推荐

JavaScript书籍推荐 1、[JavaScript高级程序设计(第3版)] 2、你不知道的JavaScript(中卷) 3、ES6标准入门(第二版)阮一峰

轻轻的往前走
11分钟前
2
0
JVM(六)为什么新生代有两个Survivor分区?

本文会使用排除法的手段,来讲解新生代的区域划分,从而让读者能够更清晰的理解分代回收器的原理,在开始之前我们先来整体认识一下分代收集器。 分代收集器会把内存空间分为:老生代和新生代...

王磊的博客
16分钟前
5
0
程序员最喜欢的15款文本编辑器推荐

程序员最喜欢的15款文本编辑器推荐 2017年09月18日 17:30:50 kangle_zhu 阅读数:59390 转载地址:http://www.cr173.com/html/50553_1.html 很多时候比如编程查看代码或者打开各种文档下我们...

linjin200
19分钟前
6
0
如何在php后端及时推送消息给客户端

walkor大神,目前需求是这样的: 有一群商家在后台网页处理批量导入产品 -》 服务器接受请求 -》 开始foreach一个一个处理导入请求; 我现在想每成功导入一个就推送到前台显示已经导入成功,...

dragon_tech
37分钟前
13
0
Java利用hanlp完成语句相似度分析的案例详解

分享一篇hanlp分词工具使用的小案例,即利用hanlp分词工具分析两个中文语句的相似度的案例。供大家一起学习参考! 在做考试系统需求时,后台题库系统提供录入题目的功能。在录入题目的时候,...

左手的倒影
44分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部