热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java程序实现监听VMware的SNMP服务发出的告警信息

以下可以应用于:Linux、Windows、Mac系统。我因为网上的文章走了很多弯路,这里如果只是做监听,不需要开启SNMP服务

以下可以应用于:Linux、Windows、Mac系统。

我因为网上的文章走了很多弯路,这里如果只是做监听,不需要开启SNMP服务,只需要看下面的代码即可,如果是发出告警是需要开启SNMP服务的。

实现时有以下几个问题需要注意:

1.VMware中配置的SNMP接收方IP和端口,这里的IP是你程序所在服务器的IP,端口一般是162。

  注意:要遵循1024 以下的端口要用root启动,这个是windows、Linux、mac通用原则

2.如果本地只是监听消息,不发出消息的话,本地不需要开启SNMP服务。

3.SNMP发出的消息都是通过MIB文件来翻译的,根据OID号来找到对应的消息,即可得到想要的消息,MIB文件也不需要导入到程序中,只需要做对应即可。

在pom.xml文件中引入snmp4j包,如下

org.snmp4jsnmp4j2.8.2

以下是代码实现:

import java.io.IOException;
import com.alibaba.fastjson.JSON;
import com.fit2cloud.commons.utils.LogUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.snmp4j.CommandResponder;
import org.snmp4j.CommandResponderEvent;
import org.snmp4j.MessageDispatcher;
import org.snmp4j.MessageDispatcherImpl;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.mp.MPv1;
import org.snmp4j.mp.MPv2c;
import org.snmp4j.mp.MPv3;
import org.snmp4j.security.AuthSHA;
import org.snmp4j.security.PrivAES128;
import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.security.USM;
import org.snmp4j.security.UsmUser;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import org.snmp4j.util.MultiThreadedMessageDispatcher;
import org.snmp4j.util.ThreadPool;public class SnmpTrapHandler implements CommandResponder{private static Logger log = LoggerFactory.getLogger(SnmpTrapHandler.class);private static int threadNum = 200;//这里的ip是指程序所在IP,这里是:192.168.0.1//1162指的是端口号,因为162需要root权限,所以测试的时候我用1162端口,需要两边的IP和端口保持一致private static String ipAddress = "udp:192.168.0.1/1162";private Snmp snmp = null;public void init(){//1、初始化多线程消息转发类ThreadPool threadPool = ThreadPool.create("SnmpTrap", threadNum);MessageDispatcher messageDispatcher = new MultiThreadedMessageDispatcher(threadPool, new MessageDispatcherImpl());//其中要增加三种处理模型。如果snmp初始化使用的是Snmp(TransportMapping transportMapping) ,就不需要增加messageDispatcher.addMessageProcessingModel(new MPv1());messageDispatcher.addMessageProcessingModel(new MPv2c());OctetString localEngineID = new OctetString(MPv3.createLocalEngineID());USM usm = new USM(SecurityProtocols.getInstance().addDefaultProtocols(), localEngineID, 0);UsmUser user = new UsmUser(new OctetString("SNMPV3"), AuthSHA.ID, new OctetString("authPassword"),PrivAES128.ID, new OctetString("privPassword"));usm.addUser(user.getSecurityName(), user);messageDispatcher.addMessageProcessingModel(new MPv3(usm));//2、创建transportMappingTransportMapping transportMapping = null;try {UdpAddress updAddr = (UdpAddress) GenericAddress.parse(System.getProperty("snmp4j.listenAddress", ipAddress));transportMapping = new DefaultUdpTransportMapping(updAddr);//3、正式创建snmpsnmp = new Snmp(messageDispatcher, transportMapping);//开启监听snmp.listen();} catch (IOException e) {log.error("初始化transportMapping失败:", e.getMessage());e.printStackTrace();}}public void start() {init();//一定要将当前对象添加至commandResponderListeners中snmp.addCommandResponder(this);System.out.println("开始监听trap信息:");}/*** 处理信息方法*/@Overridepublic void processPdu(CommandResponderEvent event) {String version = null ;String community = null;LogUtil.info("接收到的告警信息:"+ JSON.toJSONString(event));if (event.getPDU().getType() == PDU.V1TRAP) {version = "v1";community = new String(event.getSecurityName());} else if (event.getPDU().getType() == PDU.TRAP){if (event.getSecurityModel() == 2) {version = "v2";community = new String(event.getSecurityName());}else {version = "v3";}}System.out.println("接收到的trap信息:[发送来源="+event.getPeerAddress()+",snmp版本="+version+",团体名="+community+", 携带的变量="+event.getPDU().getVariableBindings()+"]");}public static void main(String[] args) {SnmpTrapHandler handler = new SnmpTrapHandler();handler.start();}
}

 

 


推荐阅读
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
author-avatar
坑爹的马_782
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有