永利酒店赌场:安全实现Linux网络监控(1)

BKJIA.com
综合报道】只要存在网络就必然会进行网络管理,现在计算机网络的发展特点是规模不断扩大,复杂性不断增加!如何更有效地利用好企业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是什么

SNMP协议简介

一、SNMP简介

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

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

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

学习网络管理,我们不得不接触到SNMP协议,那么什么是SNMP呢?就是网络总的管理协议,翻译过来的中文名称则是简单网络管理协议。从文字上面分析,就知道,这个是网络管理最基本的,也是我们需要重点掌握的内容。
简单网络管理协议(SNMP)是基于TCP/IP的网络管理,实际上就是一群标准的集合。80年代末期由IETF开发后,开始被广泛应用在各类网络设备中,成为一种网管的工业标准。SNMP又称之为管理者和代理之间的通信协议,包括理解SNMP的操作、SNMP信息的格式及如何在应用程序和设备之间交换信息。
就概念而言,SNMP为网管界定了管理者(Manager)和代理者(Agent,被管理设备)之间的关系。两者之间的共同点是都运行TCP/IP协议。管理者可对管理设备提出效能、配置、和状态等信息的询问,透过要求与回复(request/replay)的简单机制来撷取代理者身上的信息,而两者之间的信息主要是通过PDU协议数据单元来载送。SNMP使用UDP作为IP的传输层协议。
在实现过程中,管理者会发送一个PDU给一个代理者(可以是路由器、交换机、防火墙……等可支持网管的设备),代理者收到管理者所发出内含询问信息的PDU报文后,再透过PDU回传给相关的管理者。在该过程中,代理者基本上只能处于被动的状态,反复进行一问一答的模式,而唯一可由代理者自动发出的只有Trap的不定期回报特殊状况信息。
SNMP协议有两个基本命令模式:read和read/write。read是可以通过SNMP协议观察设备配置细节,而使用read/write模式可以让管理者有权限修改设备配置。以当前市场流行的大多数被网管的设备为例,如果设备的默认口令没有改变,那么攻击者就可以利用默认的口令得到其配置文件,文件一旦被破解,攻击者就能够对设备进行远程非法的配置,实行攻击。目前,绝大多数的网络设备和操作系统都可以支持SNMP,如D-Link、Cisco、3Com等等。

SNMP 是专门设计用于在 IP
网络管理网络节点服务器、工作站、路由器、交换机及 HUBS
等)的一种标准协议,它是一种应用层协议。 SNMP
使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过
SNMP
接收随机消息及事件报告)网络管理系统获知网络出现问题。简单网络管理协议(SNMP)首先是由Internet工程任务组织(Internet
Engineering Task
Force)(IETF)的研究小组为了解决Internet上的路由器管理问题而提出的。许多人认为
SNMP在IP上运行的原因是Internet运行的是TCP/IP协议,然而事实并不是这样。
SNMP被设计成与协议无关,所以它可以在IP,IPX,AppleTalk,OSI以及其他用到的传输协议上被使用。询时顺序不对,那么关于一些大的灾难性的事件的通知又会太馒。这就违背了积极主动的网络管理目的。

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

采集技术比较

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

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

SNMPv3实现更优管理
目前SNMP的发展主要包括三个版本:SNMPv1、SNMPv2以及最新的SNMPv3。从市场应用来看,目前大多数厂商普遍支持的版本是SNMPv1和v2,但从安全鉴别机制来看,二者表现较差。而SNMPv3采用了新的SNMP扩展框架,在此架构下,安全性和管理上有很大的提高。在当前的网络设备市场中,D-Link已经率先推出了支持SNMPv3的网络产品,如DES-3226S、DES-3250TG交换机等,在安全功能和管理功能上都有良好的表现。
总体来看,SNMPv1和v2版本对用户权力的惟一限制是访问口令,而没有用户和权限分级的概念,只要提供相应的口令,就可以对设备进行read或read/write操作,安全性相对来的薄弱。虽然SNMPv2使用了复杂的加密技术,但并没有实现提高安全性能的预期目标,尤其是在身份验证(如用户初始接入时的身份验证、信息完整性的分析、重复操作的预防)、加密、授权和访问控制、适当的远程安全配置和管理能力等方面。
SNMPv3是在SNMPv2基础之上增加、完善了安全和管理机制。RFC
2271定义的SNMPv3体系结构体现了模块化的设计思想,使管理者可以简单地实现功能的增加和修改。其主要特点在于适应性强,可适用于多种操作环境,不仅可以管理最简单的网络,实现基本的管理功能,还能够提供强大的网络管理功能,满足复杂网络的管理需求。
目前,市场上的网络设备尚停留在SNMPv1/v2的范畴,并未广泛支持SNMPv3,如何配置设备的SNMP服务以确保网络安全、完善管理机制呢?以下几个方面建议或许值得网管人员一试:由于基于SNMPv1/v2协议本身具有不安全性,所以在管理过程中,如果没有必要,可以不要开启SNMP代理程序;可以限制未授权IP对SNMP的访问,或者改变SNMP代理的默认口令,并使用复杂的口令;在后续采购设备中,尽可能选用支持SNMPv3的设备产品。
综合SNMP的不同版本,显然SNMPv3的应用推广势在必行,必然会以突出的优势成为新的应用趋势。一些市场反应敏捷的网络设备制造商已经推出了相关产品。据了解,D-Link在新一代产品推出时,已将此技术列入基本的协议支持,包括DES-3226S、DES-3250TG在内的多款交换机已经率先支持SNMPv3。
SNMP优势与弱点并存
在对上述网络管理理念的实施过程中,技术和工业标准或许是最为重要的环节。如果没有统一的工业标准,管理的复杂性和成本将成倍增加,网络的稳定性和可靠性将大幅度下降,智能、安全、开放的目标也无法实现。在现实中,普通网络上的所有设备都支持工业标准协议,以便不同的设备之间可以实现畅通无阻的通信,而使用专用产品则还需要配套使用高价值的附加产品。基于此,网络管理的主流技术便在几个主要的工业标准之上衍生而来,其中SNMP
(简单网络管理协议)、RMON (远程监控)和RMON
II等标准和技术无疑是最重要的部分。
用户数据网络通常是使用SNMP协议进行管理的。SNMP(Simple Network Management
Protocol,简单网络管理协议)是一种广为执行的网络协议,它使用嵌入到网络设施中的代理软件来收集网络通信信息和有关网络设备的统计数据。代理不断地收集统计数据,如所收到的字节数等,并把这些数据记录到一个管理信息库(MIB,Management
Information
Base)中,网管员通过向代理的MIB发出查询信号就可以得到这些信息,这个过程就叫做轮询(polling),是SNMP最基本的特点。
SNMP是被广泛接受并投入使用的工业标准,它的目标是保证管理信息在任意两点中传送,便于网络管理员在网络上的任何节点检索信息、进行修改、寻找故障,并完成故障诊断、容量规划和报告生成。采用轮询机制的SNMP能够提供网络管理最基本的功能集,最适合小型、快速、低价的网络环境使用。由于SNMP只要求无证实的传输层协议UDP,因而受到许多产品的广泛支持.

SNMP协议运行在UDP协议之上,它利用的是UDP协议的161/162端口。其中161端口被设备代理监听,等待接受管理者进程发送的管理信息查询请求消息;162
端口由管理者进程监听等待设备代理进程发送的异常事件报告陷阱消息,如Trap等。SNMP提供三类操作,分别为Get、Set和Trap。

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

文本方式

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

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

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

SNMP协议工作方式
SNMP以GET-SET方式替代了复杂的命令集,可以利用基本操作完成全部操作,同时,用户可以采用管理信息库标准或按标准的方式来定义自己的MIB。这样就可以通过降低网管系统中众多代理部件的成本来降低整个网管系统的成本。
在SNMP中,网管站(NMS)是网络管理的实体,网管站里运行网络管理软件,它对网络设备发送各种查询报文,并接收来自被管设备的响应及陷阱(Trap)报文,将结果显示出来。网管站通常是一台工作站、PC
Server或者就是一台PC机,通过数据网络本身与被管设备相连(如局域网口),它在网络中就是一个主机,因此在通常的网络里面都是带内网管,即网管站与设备间的数据与普通的数据是相同的。当然,在网络设备里面可以设置QoS来对相应的数据进行保护。
网管代理(Agent)则是驻留在被管设备(如路由器、交换机等)上的一个进程,负责接受、处理来自网管站的请求报文,然后将设备接口等特性管理变量的数值形成响应报文,发送给NMS,并在一些紧急情况下,如接口状态发生改变、呼叫成功等时候,主动通知NMS(发送陷阱Trap报文)。网管软件则根据这些响应的数据包,通过构建直观的拓扑图等方式,便于网管人员进行设备的监控及管理。SNMP就是用来规定NMS和Agent之间是如何传递管理信息的应用层协议。

2.MRTG软件的不足

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

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也存在着一定的问题:
它使用嵌入到网络设施中的代理软件来收集网络通信信息和有关网络设备的统计数据,代理不断地收集统计数据并记录到MIB中,网络管理人员通过向代理的MIB发出查询信号(轮询)可以得到这些信息。因此,虽然MIB计数器将统计数据的总和记录下来了,但它无法对日常通信量进行历史分析。当然,为了能全面地查看一天的通信流量和变化率,管理人员必须不断地轮询SNMP代理,例如一天中的每分钟都要轮询一次。这样,网管员可以使用SNMP来评价网络的运行状况,并揭示出通信的趋势,如哪一个网段接近通信负载的最大能力或正在导致通信出错,先进的SNMP网管站甚至可以进行编程来自动关闭端口或采取其他矫正措施来处理历史的网络数据。
尽管如此,SNMP协议建立在轮询上的管理依然存在着两个明显的弱点:在大型的网络中,轮询会产生巨大的网络管理通信量,因而导致通信拥挤情况的发生;
它将收集数据的负担加在网络管理控制台上,管理站也许能轻松地收集8个网段的信息,但当它们监控48个网段时恐怕就难以应付了。

谈到网络流量监控,相信大家都熟悉MRTG这个工具。MRTG监测网卡流量很方便,但是如果需要监测其它的系统性能比如CPU负载、系统负载,网络连接数等,就不是那么简单了。即使实现了这些功能,但管理起来非常麻烦。比如公司有1、2千个被监测点,分布在不同的机房,为了管理方便需要将这些服务器和网络设备分类,这样的话就需要将这些被监测点放在不同的MRTG配置文件中,运行多个crontab,甚至还要自己写HTML页面对其进行管理。MRTG存在许多缺点:

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

Syslog方式

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

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

永利酒店赌场 1

1. 使用文本式的数据库,数据不能重复使用;

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

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

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

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

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

2. snmp应用哪些场景

2. 只能按日、周、月、年来查看数据;

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

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

3. 只能画两个DS一条线、一个块);

 

3. snmp能做什么

4. 无管理功能;

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

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

5. 没有详细日志系统;

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

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

6. 无法详细了解一一流量具体构成;

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

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

7. 只能用于TCP/IP网络对于 SAN网络流量无能为力;

总结

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

  1. 不能在命令行下工作。

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

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

MRTG毕竟是一套很老的软件了,而且存在许多不足的地方,其作者Tobias
Oetiker在1999年就已经开始开发另一套开源软件RRDTool来代替MRTG。现在RRDTool在已经发展得成熟,在功能上MRTG难以与其相提并论。

 

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

  1. RRDTool的特点

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

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

优点:

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

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

1. 使用RRDRound Robin
Database)存储格式,数据等于放在数据库中,可以方便的调用。比如将一个RRD文件中的数据与另一个RRD文件中的数据相加;

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

4. snmp示例Demo

2. 可以定义任意时间段画图,可以用半年数据画一张图,也用半小时内的数据画一张图;

4.1、 Get操作命令:

3. 能画任意个DS,多种的图形显示方式;

4.1.1、获得本机的信息

4. 数据存储与绘图分开,减轻系统负载;

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(); } } }

5. 能任意处理RRD文件中的数据,比如在浏览监测中我们需要将数据由Bytes转化为Bits,可以将原始数据乘8。

运行截图:

缺点:

永利酒店赌场 2image.png

1. RRDTool的作用只是存储数据和画图,它没有MRTG中集成的数据采集功能;

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

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(); } }}

3. 无用户、图像管理功能。

运行截图:

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

永利酒店赌场 3image.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(); } }}

运行截图:

永利酒店赌场 4image.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(); } }}

运行截图:

永利酒店赌场 5image.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(); } }}

运行截图:

永利酒店赌场 6image.png永利酒店赌场 7tobehero666.png

网站地图xml地图