目录

一、介绍SNMP(Simple Network Management Protocol)

二、SNMP 消息和目标

三、发送 SNMP 消息

四、接收 SNMP 消息

五、实战案例

1.添加pom依赖

2.代码


一、介绍SNMP(Simple Network Management Protocol)

简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点
(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。

注意:SNMP消息全部通过UDP端口161接收,只有Trap信息采用UDP端口162。

二、SNMP 消息和目标

要与远程系统交换 SNMP 消息,必须识别该系统,必须指定有关消息交换的重新传输和超时策略信息。通过创建适合要使用的 SNMP 协议的实例,使用 SNMP4J 指定远程系统。

注意:对于 SNMPv1 和 SNMPv2c,除了接口定义的地址、重新传输和超时策略信息外,还必须使用提供必要信息。而对于SNMPv3,必须改用。它扩展了抽象类,并提供以下基于用户的安全模型 (USM) 用户信息:安全名称、安全级别、安全模型(即 USM)和权威引擎 ID。因此,为了能够使用 SNMP4J 发送 SNMP 消息,必须创建一个实例和一个实例。

三、发送 SNMP 消息

SNMP 消息是使用 SNMP 接口的实例与 SNMP4J 一起发送的。
要设置实例,只需使用实例调用其构造函数即可。SNMP 会话使用传输映射,通过使用传输协议(例如用户数据报协议 (UDP))向远程系统发送(和接收)SNMP 消息。
默认情况下,SNMP4J 实例支持 SNMP v1、v2c 和 v3。通过子类化这些SNMP协议版本的其他组合,可以得到支持。
使用 SNMP4J,SNMP 消息可以同步(阻塞)和异步(非阻塞)发送。该类不使用内部线程来处理异步和同步请求上的响应。但是,它使用传输映射的接收器线程来处理响应。
异步响应是通过在实现接口的对象实例上调用回调方法来返回的。回调是代表从线路接收响应数据包的传输映射线程执行的。因此,如果被调用的方法阻塞,则在该传输映射的侦听端口上接收的同步和异步消息的传递也将被阻止。其他传输映射将不受影响。通过仅使用同步消息或通过在回调方法中分离处理来避免阻塞。

四、接收 SNMP 消息

SNMP4J 通过传输映射的侦听端口接收 SNMP 消息。为了能够接收响应或请求,需要将该端口设置为侦听模式。这必须通过调用实例的方法启动传输映射内部侦听线程来完成。通过调用实例或关联实例上的方法,停止内部线程并关闭侦听端口。
传输映射仅以字节流的形式接收 SNMP 消息,并将消息转发到关联的实例。默认情况下,SNMP4J 使用该类的一个实例来解码和调度传入消息。该实例由类在内部创建和使用。
创建 一 个 并通过调用 来初始化其侦听端口(TransportMappingTransportMapping.listen())
实例化实现接口的类,并通过调用 向实例注册该接口:CommandResponderSnmpSnmp.addCommandResponder(CommandResponder)
当收到未处理的 SNMP 消息(因此是不存在相应未完成请求的 SNMP 消息)时,将使用解码的 PDU 和已解码 SNMP 消息的消息处理模型提供的有关已接收 SNMP 消息的其他信息来调用方法。

五、实战案例

1.添加pom依赖

<dependency><groupId>org.snmp4j</groupId><artifactId>snmp4j</artifactId><version>2.8.3</version>
</dependency>

2.代码

import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.*;
import org.snmp4j.transport.DefaultUdpTransportMapping;import java.io.IOException;/*** 获取设备信息** @author zengLingYao* @date 2021/12/02*/
public class GetMessage {/*** 获取系统基本信息*/public final static String SYS_DESC = "1.3.6.1.2.1.1.1";/*** 获取机器名*/public final static String SYS_NAME = "1.3.6.1.2.1.1.5";/*** 监控时间*/public final static String SYS_UPTIME = "1.3.6.1.2.1.1.3";public static void main(String[] args) {try {System.out.println("基本信息:"+getMessageByIpAndOid("192.168.1.94",SYS_DESC));System.out.println("获取机器名:"+getMessageByIpAndOid("192.168.1.94",SYS_NAME));System.out.println("监控时间:"+getMessageByIpAndOid("192.168.1.94",SYS_UPTIME));} catch (Exception e) {e.printStackTrace();}}public static String getMessageByIpAndOid(String ip, String oid) throws Exception{String variableString = "";try{//设定CommunityTargetCommunityTarget myTarget = new CommunityTarget();//机器的地址Address address = GenericAddress.parse("udp:"+ip+"/161");//设定地址myTarget.setAddress(address);//设置snmp共同体myTarget.setCommunity(new OctetString("public"));//设置超时重试次数myTarget.setRetries(2);//设置超时的时间myTarget.setTimeout(5*60);//设置使用的snmp版本myTarget.setVersion(SnmpConstants.version2c);//设定采取的协议TransportMapping<UdpAddress> transport = new DefaultUdpTransportMapping();//调用TransportMapping中的listen()方法,启动监听进程,接收消息,由于该监听进程是守护进程,最后应调用close()方法来释放该进程transport.listen();//创建SNMP对象,用于发送请求PDUSnmp protocol = new Snmp(transport);//创建请求pdu,获取mibPDU request = new PDU();//调用的add方法绑定要查询的OIDrequest.add(new VariableBinding(new OID(oid)));//调用setType()方法来确定该pdu的类型request.setType(PDU.GETNEXT);//调用 send(PDU pdu,Target target)发送pdu,返回一个ResponseEvent对象ResponseEvent responseEvent = protocol.send(request, myTarget);//通过ResponseEvent对象来获得SNMP请求的应答pdu,方法:public PDU getResponse()PDU response=responseEvent.getResponse();//输出if(response != null){//通过应答pdu获得mib信息(之前绑定的OID的值),方法:VaribleBinding get(int index)VariableBinding vb = response.get(0);System.out.println(vb);variableString = String.valueOf(vb.getVariable());//调用close()方法释放该进程transport.close();}}catch(IOException e){e.printStackTrace();}return variableString;}}

SNMP4J(通过java实现SNMP协议)相关推荐

  1. java 通过snmp协议获取物理机CPU、内存容量及使用率,存储的容量及使用率

    java 用snmp协议获取物理机CPU.内存容量及使用率,存储的容量及使用率,java获取trap告警 一.SNMP简介 1.什么是snmp 二.SNMP获取信息步骤 1.开启SNMP 2.MIB文 ...

  2. java使用snmp协议

    背景 控制华为交换机的poe供电与断电来重启PAD snmp协议使用 import java.io.IOException; import java.util.ArrayList; import ja ...

  3. 系统监控之SNMP协议理解

    使用Mycat分布式数据库中间件时需要对各个性能指标进行监控,官方已经提供了一个监控软件,于是讨论起来监控是怎么具体可能有哪些实现,虽然知道已经有很多的监控软件可以使用,比如zabbix,但是今天听同 ...

  4. Java基于Snmp4j库实现SNMP协议的调用

    在进行SNMP协议调用之前,要先保证主机和目的机器可以通信,可以用ping工具来尝试连通性,如果可以通信,可直接跳转到第二章节和第三章节查看协议的调用:如果不能通信,即不在同一个网段,那么需要先按照第 ...

  5. java snmp协议 获取数据

    最近工作内容涉及到snmp协议相关内容,由于第一次接触,又没有实际的环境测试,写出来的东西自己都不确定能不能用,直到最近有环境后,花了一段时间才搞定. 写下这篇文章,只是给和我之前一样的小白指点一波, ...

  6. snmp有android代理端吗,Android实现snmp协议(1)

    snmp协议是TCP/IP协议,是用c系语言完成的,本人以前移植过的uip1.0也是用c语言写的.而Android必须使用Java来实现,为此,本人首先使用了snmp4j这个jar包,建立了Java工 ...

  7. Android实现snmp协议(一)

    2015年一月初.接到华为一位老师的电话,让我帮忙做一款他们在北京展会上要用到的App,该App能够展示华为的网络设备运行状态并可以设置一些简单的参数,包括AP.LSW.AP.AR等. 华为老师跟我说 ...

  8. snmp协议及常见问题分析

    SNMP:"简单网络管理协议",用于网络管理的协议.SNMP用于网络设备的管理.SNMP的工作方式:管理员需要向设备获取数据,所以SNMP提供了get操作:管理员需要向设备执行设置 ...

  9. SNMP协议控制AP7921设备电源端口

    SNMP协议控制施耐德AP7921 SNMP基础知识点 1)写在前面: SNMP简单概述 1)什么是Snmp 2)SNMP 和 UDP 3)Snmp版本 SNMP的实现结构 SNMP有关的基本概念 1 ...

最新文章

  1. 域渗透提权之MS14-068
  2. 科大星云诗社动态20201122
  3. iqn怎么查 linux_程序员必备:46个Linux面试常见问题!收藏!
  4. 五、数据对象和属性类型
  5. 配置sql server 2000以允许远程访问
  6. sklearn自学指南(part41)--使用手册的目录
  7. dubbo(provider,consumer)点到点直连配置
  8. Filebeat占用内存和CPU过高问题排查
  9. Apache ActiveMQ消息中间件的基本使用
  10. dlna 斐讯r1怎么用_挽救智障——斐讯R1:固件升级、安装DLNA和Soundwire
  11. QCA9886降低功耗指令
  12. CC2530和8051(51单片机)的关系
  13. TIPS-国库信息处理系统
  14. 宇宙简史|生物学家也要了解的物理
  15. 三维动画在计算机上的应用,计算机图技术在三维动画中的应用.doc
  16. TIA protal与SCL从入门到精通(6)——函数循环处理
  17. 写公众号一个月关注量破900,聊聊我的感受
  18. 最小熵原理(四):“物以类聚”之从图书馆到词向量
  19. -wl,-soname的作用
  20. 0055:手机话费(C++)

热门文章

  1. 20189200余超 2018-2019-2 移动平台应用开发实践第十一周作业
  2. truncate函数
  3. DataGrip离线安装驱动
  4. 【微服务技术09】统一网关Gateway
  5. 硅谷最牛程序员,总是不经意间碾压众人
  6. 18位身份证号码最后一位校验
  7. git解决代码冲突、合并代码
  8. 数据结构(Data Structure)(C/C++)PTA习题+课后习题
  9. Unreal 入门-AO贴图
  10. 怎样解决spoolsv.exe应用程序错误