snmp整理笔记,详解如何用Mocha

来源:http://www.smjxgs.com 作者:服务器&运维 人气:142 发布时间:2019-08-10
摘要:BKJIA.com综合报道】只要存在网络就必然会进行网络管理,现在计算机网络的发展特点是规模不断扩大,复杂性不断增加!如何更有效地利用好企业IT资源,实现稳定的网络支持和网络效

BKJIA.com 综合报道】只要存在网络就必然会进行网络管理,现在计算机网络的发展特点是规模不断扩大,复杂性不断增加!如何更有效地利用好企业IT资源,实现稳定的网络支持和网络效益一直是网络管理者备感棘手的问题。

原文:http://verywhy.com/3495/日志采集方式-snmp-trap-和-syslog-的区别

1. snmp是什么

企业花很大的力气投入购买了网络设备,搭建了广域网、局域网和Internet接入网络,而网络设备的种类和类型繁多,包括路由器、交换机、负载均衡和防火墙等等,如何更有效的进行管理,才是首先要面对的问题。

日志文件能够详细记录系统每天发生的各种各样的事件,对网络安全起着非常的重要作用。网络中心有大量安全设备,将所有的安全设备逐个查看是非常费时费力的。另外,由于安全设备的缓存器以先进先出的队列模式处理日志记录,保存时间不长的记录将被刷新,一些重要的日志记录有可能被覆盖。因此在日常网络安全管理中应该建立起一套有效的日志数据采集方法,将所有安全设备的日志记录汇总,便于管理和查询,从中提取出有用的日志信息供网络安全管理方面使用,及时发现有关安全设备在运行过程中出现的安全问题,以便更好地保证网络正常运行。

SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议"。SNMP 是一种简单网络管理协议,它属于 TCP/IP 五层协议中的应用层协议,用于网络管理的协议。 SNMP 主要用于网络设备的管理。由于 SNMP 协议简单可靠 ,受到了众多厂商的欢迎,成为了目前最为广泛的网管协议。

如何确定目前网络使用状况

采集技术比较

网 络管理中常用来采集日志数据的方式包括文本方式采集、SNMP Trap方式采集和syslog方式采集,另外,其他采集方式,如Telnet 采集(远程控制命令采集)、串口采集等。我们如何选用比较合适的技术方式进行日志数据采集是必须首先考虑的,下面对当前主要的日志数据采集技术进行简单分析。

SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。

网络管理员平时只能通过设备的SNMP或设备日志文件查看和分析网络设备的使用状况,包括(网络设备的基本信息、CPU、Memory、板卡信息,以及端口的流量信息、丢包率、错包率等信息)。

文本方式

在统一安全管理系统中以文本方式采集日志数据主要是指邮件或FTP方式。邮件方式是指在安全设备内设定报警或通知条件,当符合条件的事件发生时,相关情况被一一记录下来,然后在某一时间由安全设备或系统主动地将这些日志信息以邮件形式发给邮件接受者,属于被动采集日志数据方式。其中的日志信息通常是以文本方式传送,传送的信息量相对少且需专业人员才能看懂。而FTP方式必须事先开发特定的采集程序进行日志数据采集,每次连接都是完整下载整个日志文本文件,网络传输数据量可能非常大,属于主动采集日志数据方式。

随着网络高速的发展,网络内部以百兆、千兆甚至万兆互联,即使采取功能强大的计算机来处理日志数据包的采集工作,相对来说以上两种方式速度和效率也是不尽人意。因此,文本方式只能在采集日志数据范围小、速度比较慢的网络中使用,一般在网络安全管理中不被主要采用。

SNMP管理站和SNMP代理之间是松散耦合。他们之间的通信是通过UDP协议完成的。一般情况下,SNMP管理站通过UDP协议向SNMP代理发送各种命令,当SNMP代理收到命令后,返回SNMP管理站需要的参数。但是当SNMP代理检测到网络元素异常的时候,也可以主动向SNMP管理站发送消息,通告当前异常状况。

日志文件能够详细记录系统每天发生的各种各样的事件,对网络安全起着非常的重要作用。网络中有大量设备,将所有的设备逐个查看是非常费时费力的。在日常网络管理中应该建立起一套有效的日志数据采集方法,将所有日志记录汇总,便于管理和查询,从中提取出有用的日志信息供网络管理使用,及时发现设备在运行过程中出现的问题,以便更好地保证网络正常运行。

SNMP Trap方式

建立在简单网络管理协议SNMP上的网络管理,SNMP TRAP是基于SNMP MIB的,因为SNMP MIB是定义了这个设备都有哪些信息可以被收集,哪些trap的触发条件可以被定义,只有符合TRAP触发条件的事件才被发送出去。人们通常使用 SNMP Trap 机制进行日志数据采集。生成Trap消息的事件(如系统重启)由Trap代理内部定义,而不是通用格式定义。由于Trap机制是基于事件驱动的,代理只有在监听到故障时才通知管理系统,非故障信息不会通知给管理系统。对于该方式的日志数据采集只能在SNMP下进行,生成的消息格式单独定义,对于不支持 SNMP设备通用性不是很强。

网络设备的部分故障日志信息,如环境、SNMP访问失效等信息由SNMP Trap进行报告,通过对 SNMP数据报文中Trap字段值的解释就可以获得一条网络设备的重要信息,由此可见管理进程必须能够全面正确地解释网络上各种设备所发送的Trap数据,这样才能完成对网络设备的信息监控和数据采集。

但是由于网络结构和网络技术的多样性,以及不同厂商管理其网络设备的手段不同,要求网络管理系统不但对公有Trap能够正确解释,更要对不同厂商网络设备的私有部分非常了解,这样才能正确解析不同厂商网络设备所发送的私有Trap,这也需要跟厂商紧密合作,进行联合技术开发,从而保证对私有 Trap完整正确的解析和应用。此原因导致该种方式面对不同厂商的产品采集日志数据方式需单独进行编程处理,且要全面解释所有日志信息才能有效地采集到日志数据。 由此可见,该采集在日常日志数据采集中通用性不强。

SNMP 的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。

网络设备的部分故障日志信息,如环境、SNMP访问失效等信息由SNMP Trap进行报告,通过对 SNMP 数据报文中 Trap 字段值的解释就可以获得一条网络设备的重要信息,完成对网络设备的信息监控和数据采集。

Syslog方式

已成为工业标准协议的系统日志 (syslog)协议是在加里佛尼亚大学伯克立软件分布研究中心(BSD)的TCP/IP系统实施中开发的,目前,可用它记录设备的日志。在路由器、交换机、服务器等网络设备中,syslog记录着系统中的任何事件,管理者可以通过查看系统记录,随时掌握系统状况。它能够接收远程系统的日志记录,在一个日志中按时间顺序处理包含多个系统的记录,并以文件形式存盘。同时不需要连接多个系统,就可以在一个位置查看所有的记录。syslog使用UDP作为传输协议,通过目的端口514(也可以是其他定义的端口号)将所有安全设备的日志管理配置发送到安装了syslog软件系统的日志服务器,syslog日志服务器自动接收日志数据并写到日志文件中。

SNMP的工作方式:管理员需要向设备获取数据,所以SNMP提供了操作;管理员需要向设备执行设置操作,所以SNMP提供了操作;设备需要在重要状况改变的时候,向管理员通报事件的发生,所以SNMP提供了操作。

用我们的方式打造更有效的管理

另外,选用以syslog方式采集日志数据非常方便,且具有下述原因:

第一,Syslog协议广泛应用在编程上,许多日志函数都已采纳syslog协议,syslog用于许多保护措施中。可以通过它记录任何事件。通过系统调用记录用户自行开发的应用程序的运行状况。研究和开发一些系统程序是日志系统的重点之一,例如网络设备日志功能将网络应用程序的重要行为向syslog 接口呼叫并记录为日志,大部分内部系统工具(如邮件和打印系统)都是如此生成信息的,许多新增的程序(如tcpwrappers和SSH)也是如此工作的。通过syslogd(负责大部分系统事件的守护进程),将系统事件可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络记录到远端设备上的事件。

第二,当今网络设备普遍支持syslog协议。几乎所有的网络设备都可以通过syslog协议,将日志信息以用户数据报协议(UDP)方式传送到远端服务器,远端接收日志服务器必须通过syslogd监听UDP 端口514,并根据 syslog.conf配置文件中的配置处理本机,接收访问系统的日志信息,把指定的事件写入特定文件中,供后台数据库管理和响应之用。意味着可以让任何事件都登录到一台或多台服务器上,以备后台数据库用off-line(离线)方法分析远端设备的事件。

第三,Syslog 协议和进程的最基本原则就是简单,在协议的发送者和接收者之间不要求严格的相互协调。事实上,syslog信息的传递可以在接收器没有被配置甚至没有接收器的情况下开始。反之,在没有清晰配置或定义的情况下,接收器也可以接收到信息。

2. snmp应用哪些场景

通过Portal统一展现不同的内容,接收网络设备发出的SNMP Trap和SYSLOG,并进行分析,最终进入事件管理,产生故障告警。如下图:

利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。SNMP的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以使用统一的网管面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。

 

3. snmp能做什么

对所有的日志文件可按类别进行记录汇总,导出文件,便于管理和查询,从中提取出有用的日志信息供以后分析和查询,便于有效的网络管理。

SNMP为管理员提供了一个网管平台,又称为,负责网管命令的发出、数据存储、及数据分析。被监管的设备上运行一个SNMP代理,代理实现设备与管理站的SNMP通信。

网络管理员也可以直接从整个网络拓扑图中展现出故障设备的位置,帮助网络管理员快速定位故障设备,了解到故障的影响范围。

网络管理员使用SNMP功能可以查询设备信息、修改设备的参数值、监控设备状态、自动发现网络故障、生成报告等。

管理员可以一目了然地看到发生故障的接口及当前接口的性能。

SNMP协议之所以易于使用,这是因为它对外提供了三种用于控制MIB对象的基本操作命令。它们是:Get、Set 和 Trap。

总结

Get:管理站读取代理者处对象的值。它是SNMP协议中使用率最高的一个命令,因为该命令是从网络设备中获得管理信息的基本方式。

一目了然的监控,降低对管理员的要求,并且降低了管理员的学习门槛。无需掌握复杂的路由器、交换机等设备的维护命令,只需点击鼠标与查看,即可获取设备信息。Mocha BSM即能够监控基础设施和应用,也能够将复杂的IT设施转化为简单的业务视图,使我们从IT服务的角度,保障IT部门提供稳定可靠的网络服务。

Set:管理站设置代理者处对象的值。它是一个特权命令,因为可以通过它来改动设备的配置或控制设备的运转状态。它可以设置设备的名称,关掉一个端口或清除一个地址解析表中的项等。

 

Trap: 代理者主动向管理站通报重要事件。它的功能就是在网络管理系统没有明确要求的前提下,由管理代理通知网络管理系统有一些特别的情况或问题 发生了。如果发生意外情况,客户会向服务器的162端口发送一个消息,告知服务器指定的变量值发生了变化。通常由服务器请求而获得的数据由服务器的161 端口接收。Trap 消息可以用来通知管理站线路的故障、连接的终端和恢复、认证失败等消息。管理站可相应的作出处理。

有了稳定可靠的网络服务,再通过服务水平管理来量化IT网络服务。Mocha BSM正式基于网管3.0的特点,多年磨一剑,实现适应不同的网络规模和网络应用为特点的管理信息平台。

get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值。

让我们一起打造可管理的网络,真正网管3.0的时代,就在眼前!

get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。

综合报道】只要存在网络就必然会进行网络管理,现在计算机网络的发展特点是规模不断扩大,复杂性不断增加!如何更有效地利用...

4. snmp示例Demo

4.1、 Get操作命令:

4.1.1、获得本机的信息

package me.gacl.snmp;import java.io.IOException;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.Address;import org.snmp4j.smi.GenericAddress;import org.snmp4j.smi.OID;import org.snmp4j.smi.OctetString;import org.snmp4j.smi.VariableBinding;import org.snmp4j.transport.DefaultUdpTransportMapping;/** * <p>ClassName: GetOID<p> * <p>Description:获得本机的信息 <p> */public class GetOID { public static void main(String[] args) throws Exception{ try{ //设定CommunityTarget CommunityTarget myTarget = new CommunityTarget(); //定义远程主机的地址 //Address deviceAdd = GenericAddress.parse("udp:10.20.61.120/161"); //定义本机的地址 Address localAdd = GenericAddress.parse("udp:localhost/161"); //设定远程主机的地址 //myTarget.setAddress(deviceAdd); //设定本地主机的地址 myTarget.setAddress; //设置snmp共同体 myTarget.setCommunity(new OctetString); //设置超时重试次数 myTarget.setRetries; //设置超时的时间 myTarget.setTimeout; //设置使用的snmp版本 myTarget.setVersion(SnmpConstants.version2c); //设定采取的协议 TransportMapping transport = new DefaultUdpTransportMapping();//设定传输协议为UDP //调用TransportMapping中的listen()方法,启动监听进程,接收消息,由于该监听进程是守护进程,最后应调用close()方法来释放该进程 transport.listen(); //创建SNMP对象,用于发送请求PDU Snmp protocol = new Snmp(transport); //创建请求pdu,获取mib PDU request = new PDU(); //调用的add方法绑定要查询的OID request.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1"))); request.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,1,2}))); //调用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){ System.out.println("request.size()=" request.size; System.out.println("response.size()=" response.size; //通过应答pdu获得mib信息(之前绑定的OID的值),方法:VaribleBinding get(int index) VariableBinding vb1 = response.get; VariableBinding vb2 = response.get; System.out.println; System.out.println; //调用close()方法释放该进程 transport.close(); /** * 输出结果: * request.size()=2 response.size()=2 1.3.6.1.2.1.1.1.0 = Hardware: Intel64 Family 6 Model 60 Stepping 3 AT/AT COMPATIBLE - Software: Windows Version 6.3 (Build 17134 Multiprocessor Free) 1.3.6.1.2.1.1.2.0 = 1.3.6.1.4.1.311.1.1.3.1.1 */ } }catch(IOException e){ e.printStackTrace(); } } }

运行截图:

图片 1image.png

4.1.2、获取远程计算机的名称

package me.gacl.snmp;import java.io.IOException;import org.snmp4j.CommunityTarget;import org.snmp4j.PDU;import org.snmp4j.ScopedPDU;import org.snmp4j.Snmp;import org.snmp4j.Target;import org.snmp4j.TransportMapping;import org.snmp4j.UserTarget;import org.snmp4j.event.ResponseEvent;import org.snmp4j.event.ResponseListener;import org.snmp4j.mp.MPv3;import org.snmp4j.mp.SnmpConstants;import org.snmp4j.security.AuthMD5;import org.snmp4j.security.PrivDES;import org.snmp4j.security.SecurityLevel;import org.snmp4j.security.SecurityModels;import org.snmp4j.security.SecurityProtocols;import org.snmp4j.security.USM;import org.snmp4j.security.UsmUser;import org.snmp4j.smi.Address;import org.snmp4j.smi.GenericAddress;import org.snmp4j.smi.OID;import org.snmp4j.smi.OctetString;import org.snmp4j.smi.VariableBinding;import org.snmp4j.transport.DefaultUdpTransportMapping;public class Snmp4jFirstDemo { private Snmp snmp = null; private int version ; public Snmp4jFirstDemo(int version) { try { this.version = version; TransportMapping transport = new DefaultUdpTransportMapping(); snmp = new Snmp(transport); if (version == SnmpConstants.version3) { // 设置安全模式 USM usm = new USM(SecurityProtocols.getInstance(),new OctetString(MPv3.createLocalEngineID; SecurityModels.getInstance().addSecurityModel; } // 开始监听消息 transport.listen(); } catch (IOException e) { e.printStackTrace(); } } public void sendMessage(Boolean syn, final Boolean bro, PDU pdu, String addr) throws IOException { // 生成目标地址对象 Address targetAddress = GenericAddress.parse; Target target = null; if (version == SnmpConstants.version3) { // 添加用户 snmp.getUSM().addUser(new OctetString,new UsmUser(new OctetString, AuthMD5.ID,new OctetString("MD5DESUserAuthPassword"),PrivDES.ID, new OctetString("MD5DESUserPrivPassword"))); target = new UserTarget(); // 设置安全级别 ((UserTarget) target).setSecurityLevel(SecurityLevel.AUTH_PRIV); ((UserTarget) target).setSecurityName(new OctetString); target.setVersion(SnmpConstants.version3); } else { target = new CommunityTarget(); if (version == SnmpConstants.version1) { target.setVersion(SnmpConstants.version1); ((CommunityTarget) target).setCommunity(new OctetString); } else { target.setVersion(SnmpConstants.version2c); ((CommunityTarget) target).setCommunity(new OctetString); } } // 目标对象相关设置 target.setAddress(targetAddress); target.setRetries; target.setTimeout; if  { // 发送报文 并且接受响应 ResponseEvent response = snmp.send(pdu, target); // 处理响应 System.out.println("Synchronize message from "   response.getPeerAddress()   "rn" "request:"   response.getRequest()   "rn" "response:"   response.getResponse; /** * 输出结果: * Synchronize message from 10.20.61.120/161 request:GET[requestID=680783532, errorStatus=Success, errorIndex=0, VBS[1.3.6.1.2.1.1.5.0 = Null]] response:RESPONSE[requestID=680783532, errorStatus=Success, errorIndex=0, VBS[1.3.6.1.2.1.1.5.0 = IE11Win7]] */ } else { // 设置监听对象 ResponseListener listener = new ResponseListener() { public void onResponse(ResponseEvent event) { if (bro.equals {  event.getSource.cancel(event.getRequest; } // 处理响应 PDU request = event.getRequest(); PDU response = event.getResponse(); System.out.println("Asynchronise message from "   event.getPeerAddress()   "rn" "request:"   request   "rn" "response:"   response); } }; // 发送报文 snmp.send(pdu, target, null, listener); } } public static void main(String[] args) { //Snmp的三个版本号 //int ver3 = SnmpConstants.version3; int ver2c = SnmpConstants.version2c; //int ver1 = SnmpConstants.version1; Snmp4jFirstDemo manager = new Snmp4jFirstDemo; // 构造报文 PDU pdu = new PDU(); //PDU pdu = new ScopedPDU(); // 设置要获取的对象ID,这个OID代表远程计算机的名称 OID oids = new OID("1.3.6.1.2.1.1.5.0"); pdu.add(new VariableBinding; // 设置报文类型 pdu.setType; //((ScopedPDU) pdu).setContextName(new OctetString; try { // 发送消息 其中最后一个是想要发送的目标地址 manager.sendMessage(false, true, pdu, "udp:10.20.61.120/161");//10.20.61.120 Win7虚拟机 } catch (IOException e) { e.printStackTrace(); } }}

运行截图:

图片 2image.png

4.2、 Set操作命令:

4.2.1、修改读取的远程计算机的名称

package me.gacl.snmp;import java.io.IOException;import java.util.Vector;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.Address;import org.snmp4j.smi.GenericAddress;import org.snmp4j.smi.OID;import org.snmp4j.smi.OctetString;import org.snmp4j.smi.VariableBinding;import org.snmp4j.transport.DefaultUdpTransportMapping;public class SnmpUtil { private Snmp snmp = null; private Address targetAddress = null; public void initComm() throws IOException { // 设置Agent方的IP和端口 targetAddress = GenericAddress.parse("udp:10.20.61.120/161"); TransportMapping transport = new DefaultUdpTransportMapping(); snmp = new Snmp(transport); transport.listen(); } public ResponseEvent sendPDU throws IOException { // 设置 target CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString); target.setAddress(targetAddress); // 通信不成功时的重试次数 target.setRetries; // 超时时间 target.setTimeout; target.setVersion(SnmpConstants.version1); // 向Agent发送PDU,并返回Response return snmp.send(pdu, target); } public void setPDU() throws IOException { // set PDU PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 5, 0 }), new OctetString("SNMPTEST"))); pdu.setType; sendPDU; } public void getPDU() throws IOException { // get PDU PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 5, 0 }))); pdu.setType; readResponse(sendPDU; } public void readResponse(ResponseEvent respEvnt) { // 解析Response if (respEvnt != null && respEvnt.getResponse() != null) { Vector<VariableBinding> recVBs = (Vector<VariableBinding>) respEvnt.getResponse().getVariableBindings(); for (int i = 0; i < recVBs.size { VariableBinding recVB = recVBs.elementAt; System.out.println(recVB.getOid()   " : "   recVB.getVariable; } } } public static void main(String[] args) { try { SnmpUtil util = new SnmpUtil(); util.initComm(); util.setPDU(); util.getPDU(); } catch (IOException e) { e.printStackTrace(); } }}

运行截图:

图片 3image.png

4.3、 Trap操作命令:

4.3.1、发送Trap

package me.gacl.snmp;import java.io.IOException;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.Address;import org.snmp4j.smi.GenericAddress;import org.snmp4j.smi.OID;import org.snmp4j.smi.OctetString;import org.snmp4j.smi.UdpAddress;import org.snmp4j.smi.VariableBinding;import org.snmp4j.transport.DefaultUdpTransportMapping;public class TrapUtil { private Snmp snmp = null; private Address targetAddress = null; private TransportMapping transport = null; public void initComm() throws IOException { // 设置Agent方的IP和端口 targetAddress = GenericAddress.parse("udp:10.20.61.109/162"); // 设置send trap的IP和端口 transport = new DefaultUdpTransportMapping(new UdpAddress("10.20.61.120/161")); snmp = new Snmp(transport); transport.listen(); } public ResponseEvent sendPDU throws IOException { // 设置 target CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString); target.setAddress(targetAddress); // 通信不成功时的重试次数 target.setRetries; // 超时时间 target.setTimeout; target.setVersion(SnmpConstants.version2c); // 向Agent发送PDU,并返回Response return snmp.send(pdu, target); } public void setTrap() throws IOException { // 构造Trap PDU PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.1"), new OctetString("SnmpTrap"))); pdu.setType; sendPDU; System.out.println("Trap sent successfully."); } public static void main(String[] args) { try { TrapUtil util = new TrapUtil(); util.initComm(); util.setTrap(); } catch (IOException e) { e.printStackTrace(); } }}

运行截图:

图片 4image.png

4.3.2、接收Trap

package me.gacl.snmp;import java.io.IOException;import org.snmp4j.CommandResponder;import org.snmp4j.CommandResponderEvent;import org.snmp4j.PDU;import org.snmp4j.Snmp;import org.snmp4j.TransportMapping;import org.snmp4j.smi.Address;import org.snmp4j.smi.GenericAddress;import org.snmp4j.smi.UdpAddress;import org.snmp4j.transport.DefaultUdpTransportMapping;public class Snmp4jTrapDemo { private Snmp snmp = null; private Address targetAddress = null; private TransportMapping transport = null; public void initComm() throws IOException { // 设置Agent方的IP和端口 targetAddress = GenericAddress.parse("udp:10.20.61.120/161"); // 设置接收trap的IP和端口 transport = new DefaultUdpTransportMapping(new UdpAddress("10.20.61.109/162")); snmp = new Snmp(transport); CommandResponder trapRec = new CommandResponder() { public synchronized void processPdu(CommandResponderEvent e) { // 接收trap PDU command = e.getPDU(); if (command != null) { System.out.println(command.toString; } } }; snmp.addCommandResponder; transport.listen(); } public synchronized void listen() { System.out.println("Waiting for traps.."); try { this.wait();//Wait for traps to come in } catch (InterruptedException ex) { System.out.println("Interrupted while waiting for traps: "   ex); System.exit; } } public static void main(String[] args) { try { Snmp4jTrapDemo traputil = new Snmp4jTrapDemo(); traputil.initComm(); traputil.listen(); } catch (IOException e) { e.printStackTrace(); } }}

运行截图:

图片 5image.png图片 6tobehero666.png

本文由4887王中王鉄算盘奖结果发布于服务器&运维,转载请注明出处:snmp整理笔记,详解如何用Mocha

关键词:

上一篇:全面了解IT服务管理,如何做好服务流程

下一篇:没有了

最火资讯