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接入互连网,而互联网设施的种类和连串多数,包蕴路由器、交换机、负载均衡和防火墙等等,如何更低价的张开管理,才是第大器晚成要直面的主题材料。

日记文件可以详细记录系统每Nissan生的一应俱全的风浪,对网络安全起着非常的要害成效。互连网基本有大气安全设备,将有着的安全设备各个查看是可怜费时费事的。此外,由于安全设备的缓存器以先进先出的系列格局管理日志记录,保存时间不长的笔录将被刷新,一些关键的日记记录有希望被覆盖。因而在平凡网络安全治本中应该建构起生龙活虎套立竿见影的日记数据采撷方法,将兼具安全设备的日记记录汇总,便于管理和查询,从中提抽出有用的日记音讯供互联网安全管理方面使用,及时发掘存关安全设备在运作进程中冒出的中卫难题,以便越来越好地保险互连网健康运转。

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格局必需事先支付特定的募集程序开展日志数据搜聚,每一趟三回九转都以豆蔻梢头体化下载整个日志文本文件,互连网传输数据量只怕极大,归于主动搜聚日志数据方式。

乘势互连网飞速的前进,互联网之中以百兆、千兆甚至万兆互联,就算使用成效强盛的Computer来拍卖日志数据包的采摘专门的学业,相对来讲以上三种艺术速度和频率也是不满。因而,文本格局只好在访谈日志数据范围小、速度相当慢的网络中使用,常常在网络安全治本中不被注重采用。

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)协议是在Gary佛尼亚大学Burke立软件分布切磋为主(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操作:再次回到的一个或八个参数值。那些操作是由代理进程发生的。

综合报纸发表】只要存在互连网就必定会将会进行网络管理,以往Computer网络的前进特色是规模不断扩张,复杂性不断加码!怎么着更低价地采用…

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、获取远程Computer的称呼

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、修改读取的长途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

相关文章