snmp整理笔记,详解怎么着用Mocha

BKJIA.com
综合简报】只要存在网络就必将会实行互联网管理,现在Computer互联网的迈入特征是规模不断扩充,复杂性不断扩充!怎么样更实用地采纳好公司IT财富,达成平安的互连网支持和互连网功用一向是网络经理备感棘手的标题。

原文:http://verywhy.com/3495/%E6%97%A5%E5%BF%97%E9%87%87%E9%9B%86%E6%96%B9%E5%BC%8F-snmp-trap-%E5%92%8C-syslog-%E7%9A%84%E5%8C%BA%E5%88%AB

1. snmp是什么

信用合作社花一点都不小的劲头投入购买了互联网设施,搭建了广域网、局域网和Internet接入网络,而网络设施的连串和类型多数,包罗路由器、交流机、负载均衡和防火墙等等,如何更有效的拓展田间管理,才是首先要面对的主题素材。

日记文件能够详细笔录系统每一日发生的五花八门的风云,对互连网安全起着特别的重中之重效率。互联网基本有大量安全设备,将有所的安全设备各种查看是10分费时费劲的。其余,由于安全设备的缓存器以先进先出的连串格局管理日志记录,保存时间不短的笔录将被刷新,一些重中之重的日志记录有十分大大概被遮盖。因而在平时互联网安全治本中应有树立起1套卓有成效的日志数据收罗方法,将具备安全设备的日记记录汇总,便于管理和询问,从中提抽出有用的日志音讯供网络安全管理方面使用,及时发掘有关安全设备在运营进程中冒出的安全主题素材,以便更加好地保障互联网健康运作。

SNMP是英文”Simple Network Management
Protocol
“的缩写,粤语意思是”轻巧互连网处理协议“。SNMP
是1种轻易互连网管理协议,它属于 TCP/IP
伍层协商中的应用层协议,用于网络管理的情商。 SNMP
根本用来互联网设施的管理。由于 SNMP 磋商轻松可相信
,受到了好些个厂家的应接,成为了目前极端布满的网管协议。

怎么明确目前网络使用情形

征集本领比较

网 络管理中常用来搜罗日志数据的主意包含文件方式募集、SNMP
Trap格局搜聚和syslog形式搜聚,其它,别的收罗情势,如Telnet
收罗(远程序调节制命令收罗)、串口搜聚等。大家怎么着采纳相比确切的技巧方法进行日志数据搜罗是必须首先怀恋的,上边对当前第3的日记数据采撷才能拓展简要解析。

SNMP协议首要由两大片段构成:SNMP管理站和SNMP代理。SNMP管理站是一个着力节点,担当征集维护各样SNMP成分的新闻,并对那一个新闻进行处理,最后汇报给网络管理员;而SNMP代理是运营在各种被管制的网络节点之上,负担总计该节点的各样音信,并且肩负与SNMP管理站交互,接收并实践管理站的命令,上传各样地点的网络新闻。

网络管理员平日不得不通过配备的SNMP或设施日志文件查看和分析互联网设施的施用处境,包蕴(网络设施的主旨音讯、CPU、Memory、板卡音讯,以及端口的流量音讯、丢包率、错包率等新闻)。

文本情势

在统壹安全保管连串中以文件格局搜聚日志数据首若是指邮件或FTP格局。邮件方式是指在安全设备内设定报告警察方或公告条件,当符合条件的事件爆发时,相关景况被逐壹记录下来,然后在某临时间由安全设备或种类积极地将这个日记音讯以邮件方式发放邮件接受者,属于被动搜聚日志数据方式。个中的日志消息经常是以文件格局传送,传送的信息量相对少且需正规人士才具看懂。而FTP格局必须先行支付特定的搜集程序开展日志数据搜罗,每一次接二连三都以总体下载整个日志文本文件,网络传输数据量或许相当大,属于主动搜罗日志数据格局。

乘势互联网高速的升华,互连网之中以百兆、千兆以至万兆互联,就算接纳作用强大的Computer来管理日志数据包的搜罗工作,相对来讲以上二种方法速度和功效也是遗憾。由此,文本格局只可以在征集日志数据范围小、速度不快的互连网中选取,一般在互连网安全治本中不被第一使用。

SNMP管理站和SNMP代理之间是马耳东风耦合。他们之间的通讯是因此UDP共同商议达成的。一般景观下,SNMP管理站通过UDP商业事务向SNMP代理发送各类吩咐,当SNMP代理收到命令后,重临SNMP处理站必要的参数。不过当SNMP代理检测到互联网成分格外的时候,也足以积极向SNMP管理站发送音信,通知当前分外情况。

日记文件能够详细记录系统每尼桑生的大多的事件,对互连网安全起着10分的根本职能。互连网中有雅量配备,将持有的器物每一个查看是卓殊费时费劲的。在普通网络管理中应该建立起一套立见成效的日记数据搜聚方法,将装有日志记录汇总,便于管理和查询,从中提抽出有用的日记新闻供互连网管理接纳,及时开采设备在运营进度中出现的标题,以便更加好地确认保障互联网健康运作。

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
的中坚观念:为不一样品种的配备、差异商家生产的器械、不相同型号的装备,定义为3个联结的接口和商讨,使得助理馆员能够是应用统壹的外观面对这一个要求管住的互连网设施开始展览管理。通过网络,管理员能够管理放在差别物理空间的装备,从而大大提高网络管理的成效,简化网络管理员的行事。

网络设施的有个别故障日志音讯,如景况、SNMP访问失效等音信由SNMP
Trap进行报告,通过对 SNMP 数据报文中 Trap
字段值的分解就能够赢得一条网络设施的基本点音信,实现对互连网设施的音讯监察和控制和数据搜集。

Syslog方式

已改为工业规范协议的系统日志
(syslog)协议是在Gary佛尼亚大学Burke立软件分布钻探为主(BSD)的TCP/IP系统实践中支出的,近年来,可用它记录设备的日记。在路由器、调换机、服务器等互联网设施中,syslog记录着系统中的任何事件,管理者能够经过查阅系统记录,随时精晓系统意况。它能够接收远程系统的日记记录,在二个日记中定期间顺序管理包括多少个系统的记录,并以文件情势存盘。同时不要求一连七个系统,就能够在二个岗位查看全数的笔录。syslog使用UDP作为传输协议,通过目的端口51四(也得以是别的概念的端口号)将兼具安全设备的日记管理配置发送到安装了syslog软件系统的日志服务器,syslog日志服务器自动接到日志数据并写到日志文件中。

SNMP的行事办法:助理馆员需求向设施获取数据,所以SNMP提供了操作;助理馆员须要向设备进行设置操作,所以SNMP提供了操作;设备亟需在首要场景更换的时候,向管理员通报事件的发生,所以SNMP提供了操作。

用大家的秘技制作更有效的军管

其余,采纳以syslog情势募集日志数据非常便利,且全部下述原因:

第一,Syslog协议遍布应用在编制程序上,大多日志函数都已采取syslog协议,syslog用于多数珍视措施中。能够通过它记录任何事件。通过系统调用记录用户自行开荒的应用程序的运维情形。研讨和支付一些系统程序是日记系统的要害之一,举个例子互连网设施日志作用将互联网应用程序的机要表现向syslog
接口呼叫并记下为日志,一大半之中系统工具(如邮件和打字与印刷系统)都是如此生成新闻的,大多猛增的次第(如tcpwrappers和SSH)也是那样行事的。通过syslogd(肩负大部分系统事件的照拂进度),将系统事件能够写到一个文书或配备中,或给用户发送一个新闻。它能记录本地事件或通过网络记录到远端设备上的事件。

其次,当今互联网设施广泛扶助syslog协议。大概具备的互连网设施都足以由此syslog协议,将日志新闻以用户数量报业协会议(UDP)格局传递到远端服务器,远端接收日志服务器必须经过syslogd监听UDP
端口51四,并基于
syslog.conf配置文件中的配置管理本机,接收访问系统的日记新闻,把钦点的事件写入一定文件中,供后台数据库处理和响应之用。意味着可以让别的事件都登入到一台或多台服务器上,以备后台数据库用off-line(离线)方法分析远端设备的风浪。

其三,Syslog
协构和经过的最基本条件正是轻易,在商谈的发送者和接收者之间不供给严刻的互动协调。事实上,syslog新闻的传递能够在接收器未有被陈设以至未有接收器的状态下先导。反之,在未曾明晰配置或概念的意况下,接收器也足以选用到音讯。

2. snmp应用哪些境况

透过Portal统一显示不一致的内容,接收网络设施发生的SNMP
Trap和SYSLOG,并举行分析,最后进入事件管理,爆发故障报告警察方。如下图:

使用SNMP,一个管理专门的工作站能够远程管理全体协理那种协议的互连网设施,包涵监视网络状态、修改互联网设施配置、接收网络事件警示等。SNMP的大旨境维:为分裂种类的配备、不一样商家生产的器械、差别型号的器物,定义为1个联结的接口和商讨,使得管理员能够动用统1的网管面对这么些要求管住的网络设施进行保管。通过网络,管理员可以处理放在不一样物理空间的配备,从而大大提升网络管理的频率,简化网络助理馆员的劳作。

 

3. snmp能做哪些

对持有的日记文件可按类别举办记录汇总,导出文件,便于管理和询问,从中提收取有用的日记消息供之后分析和查询,便于有效的网络管理。

SNMP为总指挥提供了贰个网管平台,又称为,担任网管命令的发出、数据存款和储蓄、及数据解析。被软禁的设备上运营二个SNMP代理,代理实现设备与管理站的SNMP通讯。

网络管理员也足以直接从全部网络拓扑图中呈现出故障设备的地点,支持网络管理员火速稳固故障设备,驾驭到故障的熏陶范围。

互联网助理馆员使用SNMP成效能够查询设备消息、修改设备的参数值、监控设备状态、自动发掘互联网故障、生成报告等。

领队可以洞察地观看发生故障的接口及当前接口的性情。

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

总结

Get:管理站读取代理者处目标的值。它是SNMP协议中使用率最高的3个下令,因为该命令是从网络设施中获取管理新闻的中坚措施。

看清的监察,降低对领队的渴求,并且降低了组织者的求学诀窍。无需明白复杂的路由器、沟通机等设备的掩护命令,只需点击鼠标与查看,就能够获得器械新闻。Mocha
BSM就可以以监察和控制基础设备和行使,也能够将复杂的IT设施转化为简易的事情视图,使大家从IT服务的角度,保证IT部门提供牢固可信赖的网络服务。

Set:管理站设置代理者处对象的值。它是二个特权命令,因为能够由此它来改动设备的布局或调控器物的运营意况。它能够安装设备的称号,关掉多少个端口或化解2个地方解析表中的项等。

 

Trap:
代理者主动向管理站通报首要事件。它的功用正是在网络管理体系绝非明显供给的前提下,由管理代理布告网络处理类别有部分特意的事态或问题发生了。如若产生意外意况,客户会向服务器的162端口发送叁个新闻,告知服务器钦定的变量值产生了变化。平常由服务器请求而获得的数目由服务器的161端口接收。Trap
新闻能够用来打招呼管理站线路的故障、连接的极限和回复、认证战败等新闻。管理站可相应的作出管理。

有了安居乐业可信的互联网服务,再经过服务水平处理来量化IT互联网服务。Mocha
BSM正式基于网管三.0的风味,多年磨1剑,实现适应分化的网络规模和网络选用为特征的军事管制消息平台。

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

让我们一齐制作可管制的网络,真正网管三.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

四.1.二、获取远程计算机的称号

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() + "\r\n"+"request:" + response.getRequest() + "\r\n"+"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() + "\r\n"+"request:" + request + "\r\n"+"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操作命令:

肆.二.一、修改读取的远程Computer的名号

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

相关文章

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注