SNMP+编程
snmp js开发例子
snmp js开发例子SNMP(Simple Network Management Protocol)是一种用于管理和监控网络设备的协议。
它通过发送和接收消息来获取和设置设备的信息。
在JavaScript开发中,可以使用SNMP.js库来实现SNMP协议的功能。
下面列举了10个使用SNMP.js开发的例子,以帮助读者了解如何使用该库进行网络设备管理和监控。
1. 获取设备的基本信息:使用SNMP.js可以通过发送SNMP GET 请求来获取设备的基本信息,如设备名称、设备型号、设备厂商等。
2. 获取设备的网络接口信息:通过发送SNMP GET请求,可以获取设备上的网络接口信息,如接口名称、接口状态、接口速率等。
3. 监控设备的系统负载:使用SNMP.js可以周期性地发送SNMP GET请求来获取设备的系统负载信息,如CPU利用率、内存利用率等,以便及时发现和解决性能问题。
4. 监控设备的网络流量:通过发送SNMP GET请求,可以获取设备的网络流量信息,如入流量、出流量等,以便对网络带宽进行监控和管理。
5. 设置设备的配置参数:使用SNMP.js可以发送SNMP SET请求来设置设备的配置参数,如修改设备的IP地址、修改设备的管理员密码等。
6. 监控设备的连接状态:通过发送SNMP GET请求,可以获取设备的连接状态信息,如设备是否在线、设备是否可达等,以便及时发现和解决网络故障。
7. 监控设备的温度和湿度:使用SNMP.js可以获取设备的温度和湿度信息,以便对设备的环境进行监控和管理,防止设备过热或受潮。
8. 监控设备的电源状态:通过发送SNMP GET请求,可以获取设备的电源状态信息,如电源是否正常、电源剩余容量等,以便及时预警和维护设备的供电系统。
9. 监控设备的日志信息:使用SNMP.js可以获取设备的日志信息,如系统日志、安全日志等,以便及时发现和解决设备故障或安全事件。
10. 监控设备的报警信息:通过发送SNMP GET请求,可以获取设备的报警信息,如设备故障报警、设备运行状态报警等,以便及时响应和处理设备异常情况。
snmp-编程
【关于SNMP】SNMP = Simple Network Management Protocol 简单网络管理协议,由IETF(Internet Engineering Task Force)定义,详细的标准在其发布的RFC(Request For Comments)中。
【版本】SNMPv1 SNMP最初的版本,安全控制基于community,一种纯文本字符串,由用户自定义配置,用来当作访问设备的权限密码,权限分读,写,trap三种。
这种文本在网络中以明文传输,所以安全性无法得到保证。
SNMPv2 SNMP的修订版本,安全控制同样基于community(因此这个版本也称为v2c),但在trap系统中加入inform机制,比trap更加可靠。
这个版本能够一次检索大块数据,支持GetBulk操作,并且V2版的SMI进行了进一步的扩展。
SNMPv3 SNMP最新的一个版本,拥有较好的安全性,安全机制上完全抛弃community,但这个版本中没有再追加新的SMI或MIB,所以可以说SNMPv3 = SNMPv2 + 安全 + 管理。
整个SNMP体系重新进行建模,形成了一个以“entity-engine-application”为核心的体系框架:【常见概念】MIB = Management Information Base,管理信息库。
它是网络管理数据的标准,在这个标准里规定了网络代理设备必须保存的数据项目,数据类型,以及允许在每个数据项目中的操作。
所有数据采用树形结构保存。
当前广泛使用的是第二版MIB,称为MIB-II。
SMI = Structure of Management Information,管理信息结构。
SMI可以看做是ASN.1(Abstract Syntax Notation One,抽象语法定义。
是一种用来定义语法的语言)的一个子集,定义了所使用的ASN.1的类型和语法,以及SNMP中使用到的类型,宏,符号等等。
snmp walk 编码规则
snmp walk 编码规则SNMP(Simple Network Management Protocol)是一种用于管理和监控网络设备的应用层协议。
它通过发送和接收消息来收集设备的状态信息,并且可以配置和控制这些设备。
其中,SNMP Walk是一种常用的命令,通过它可以逐一获取网络设备上的所有信息。
本文将详细介绍SNMP Walk的相关编码规则,并逐步解析其工作原理。
1. SNMP简介(150-200字)SNMP,即简单网络管理协议,是一种用于管理和监控网络设备的应用层协议。
它通过发送和接收消息来收集设备的状态信息,并且可以配置和控制这些设备。
SNMP的核心思想是Agent-Manager架构,其中Agent 指网络设备上运行的SNMP代理,Manager指对网络设备进行管理的主机。
2. SNMP Walk概述(150-200字)SNMP Walk是一种常用的命令,用于逐一获取网络设备上的所有信息。
它通过连续执行SNMP GetNext命令来实现,从某个根节点开始,不断向下遍历设备的MIB(管理信息基础)树,直到达到树的末端或者到达指定的结束条件。
SNMP Walk可用于获取设备的配置信息、性能数据、状态信息等,对于网络管理人员具有重要的作用。
3. SNMP编码规则(300-400字)SNMP使用基于ASN.1(抽象语法标记)的编码规则进行数据传输。
ASN.1定义了数据结构的表示和编码方式,以保证在不同平台之间的兼容性。
SNMP将数据编码为二进制数据包,并使用基于标记的结构来存储和读取数据。
SNMP数据包由头部和消息体组成。
头部包含了版本信息、社区名和消息类型等。
消息体中包含了具体的管理请求或者管理应答。
对于SNMP Walk命令,可以使用OID(对象标识符)来唯一标识设备中的每个节点。
OID由一系列的数字组成,表示了节点在MIB树中的位置。
通过不断执行SNMP GetNext命令并传递当前节点的OID,可以逐级获取设备上的信息。
SNMP管理器编程
计算机网络管理技术实验报告实验步骤:1、编译SNMP++软件包(1)下载SNMP++v3.2.25.tar.gz并解压到D盘根目录下,同时修改文件D:\snmp++\include\snmp_pp\config_snmp_pp.h,在其中添加下面代码用来去除SNMPv3(如果不添加该行,那么需要添加des库来实现SNMPv3的安全功能):#define _NO_SNMPv3 //去掉SNMPv3。
(2)按照教材91页7.2.2小节的步骤完成编译工作注意:为工程添加的源文件是指D:\snmp++\src下的所有*.cpp文件,头文件是指D:\snmp++\include\snmp_pp下的所有*.h文件。
编译截图如下:将生成的静态链接库文件直接复制到VC安装目录:\VC98\ Lib中去:2、编写一个简单的SNMP Manager。
(1)、首先建立VC++6.0控制台工程ManagerTest,在Project →Settings→Link →Object /library modules中添加ws2_32.lib 、snmp _pp.lib,如下图所示:(2)、输入ManagerTest的全部代码,然后执行编译:(3)、修改程序,查询设备(172.21.85.254)的ipInReceives对象的信息。
(4)、修改程序,查询设备(172.21.85.254)的ipRouteTable中目的网络为210.38.176.0的ipRouteNextHop对象的信息。
(5)、尝试完善程序,使得能根据输入的IP、对象OID、端口等进行信息查询,例如:ManagerTest 172.21.85.254 1.3.6.1.2.1.1.1.0 161。
单片机 snmp例程
单片机 snmp例程单片机(Microcontroller)是一种集成了微处理器核心、存储器、输入/输出端口和定时器等功能的集成电路芯片,用于控制各种嵌入式系统。
SNMP(Simple Network Management Protocol)是一种用于管理网络设备的标准协议。
在单片机上实现SNMP功能可以让单片机成为网络中的可管理设备,从而实现远程监控和管理。
要在单片机上实现SNMP功能,首先需要选择支持SNMP协议栈的单片机芯片或者外部模块。
然后,需要编写相应的SNMP例程来实现SNMP协议的功能。
这个例程通常包括SNMP协议的解析、数据处理、响应生成等功能。
在编写SNMP例程时,需要考虑以下几个方面:1. 协议栈选择,选择合适的SNMP协议栈,例如uC/OS SNMP、lwIP等,根据单片机的型号和资源情况进行选择。
2. 数据处理,实现SNMP协议的数据处理功能,包括MIB (Management Information Base)的管理、Trap/Inform的发送、GET/SET/GETNEXT等PDU的处理等。
3. 网络通信,实现单片机与网络之间的通信功能,包括UDP或者TCP/IP协议栈的集成和网络数据包的收发。
4. 资源管理,考虑单片机的资源限制,合理利用有限的存储器和计算能力来实现SNMP功能。
在实现SNMP例程时,还需要考虑单片机的实际应用场景和需求,例如监控设备的类型、数据采集频率、安全性等因素。
同时,需要进行充分的测试和调试,确保SNMP功能的稳定性和可靠性。
总的来说,实现单片机上的SNMP例程需要充分理解SNMP协议和单片机的硬件资源,同时结合实际应用需求进行设计和开发。
这样才能确保单片机能够成功地成为网络中的可管理设备,实现远程监控和管理的功能。
snmp java开源实现案例
SNMP(Simple Network Management Protocol)是一种用于网络管理和监控的协议,它被广泛应用在IT系统中。
SNMP通过管理信息的采集和通信来实现对网络设备、服务器和应用程序的远程监控和管理。
在Java开发中,也存在很多开源的SNMP实现库,本文将介绍一些常用的SNMP Java开源实现案例。
一、SNMP Java开源实现介绍1.1 SNMP4JSNMP4J是一个开源的、纯Java语言编写的SNMP库,用于实现SNMP的网络管理功能。
它提供了完整的SNMP协议支持,包括SNMPv1、SNMPv2c和SNMPv3,能够灵活处理SNMP消息的编码和解码。
SNMP4J还提供了丰富的API,可以方便地进行SNMP管理信息的读取、设置和通知等操作。
它是一个非常成熟且稳定的开源SNMP实现库。
1.2 OpenNMSOpenNMS是一个基于SNMP的网络管理系统,它采用Java语言开发,并且提供了开源的SNMP实现功能。
OpenNMS不仅支持SNMP协议,还兼容其他网络管理协议,可以实现对多种网络设备和应用程序的监控和管理。
它具有丰富的网络管理功能,可以用于构建大型的企业级网络管理系统。
1.3 Apache Commons NetApache Commons Net是Apache软件基金会的一个开源项目,提供了一系列用于网络编程的工具和组件。
其中,它也包含了对SNMP协议的支持,可以用于Java程序对SNMP设备进行管理和监控。
Apache Commons Net具有良好的跨评台性和稳定性,适合于构建跨评台的SNMP管理软件。
二、SNMP Java开源实现的应用场景2.1 网络设备监控SNMP协议最常见的应用场景之一是对网络设备进行实时监控和管理。
使用SNMP Java开源实现库,可以轻松地编写程序,实现对路由器、交换机、防火墙和其他网络设备的监控,包括设备的性能指标、状态信息和配置信息的读取与设置。
snmpconf_LINUX_C语言_编程
NAMEsnmpconf - creates and modifies SNMP configuration filesSYNOPSISsnmpconf[OPTIONS] [fileToCreate]Start with:snmpconf-g basic_setupOr even just:snmpconfDESCRIPTIONsnmpconf is a simple Perl script that walks you through setting up a configuration file step by step.It should be fairly straight forward to use.Merely run it and answer its questions.In its default mode of operation, it prompts the user with menus showing sections of the various configura-tion files it knows about.When the user selects a section, a sub-menu is shown listing of the descriptions of the tokens that can be created in that section.When a description is selected, the user is prompted with questions that construct the configuration line in question.Finally,when the user quits the program any configuration files that have been edited by the user are saved to the local directory,fully commented.A particularly useful option is the-g switch, which walks a user through a specific set of configurationquestions. Run:snmpconf -g basic_setupfor an example.OPTIONS-f Force overwriting existing files in the current directory without prompting the user if this is a desired thing to do.-i When finished, install the files into the location where the global system commands expect to find them.-p When finished, install the files into the users home directory’s.snmp subdirectory (where the applications will also search for configuration files).-I DIRECTORYWhen finished, install the files into the directory DIRECTORY.-a Don’t ask any questions. Simply read in the various known configuration files and write them back out again. This has the effect of "auto-commenting" the configuration files for you.See theNEAT TRICKS section below.-r all|noneRead in either all or none of the found configuration files.Normally snmpconf prompts you forwhich files you wish to read in.Reading in these configuration files will merge these files withthe results of the questions that it asks of you.-R FILE,...Read in a specific list of configuration files.-g GROUPNAMEGroups of configuration entries can be created that can be used to walk a user through a series ofquestions to create an initial configuration file.There are no menus to navigate, just a list ofquestions. Run:snmpconf -g basic_setupfor a good example.-G List all the known groups.-c CONFIGDIRsnmpconf uses a directory of configuration information to learn about the files and questions thatit should be asking.This option tells snmpconf to use a different location for configuring itself.-q Run slightly more quietly.Since this is an interactive program, I don’t recommend this option since it only removes information from the output that is designed to help you.-d Turn on lots of debugging output.-D Add ev e n more debugging output in the form of Perl variable dumps.NEAT TRICKSsnmpconf -g basic_setupHave I mentioned this command enough yet?It’s designed to walk someone through an initialsetup for the snmpd(8)daemon. Really,you should try it.snmpconf -R /usr/local/snmp/snmpd.conf -a -f snmpd.confAutomatically reads in an snmpd.conf file (for example) and adds comments to them describingwhat each token does.Try it. It’s cool.NOTESsnmpconf is actually a very generic utility that could be easily configured to help construct just about any kind of configuration file.Its default configuration set of files are SNMP based.SEE ALSOsnmpd(8), snmp_config(5), snmp.conf(5), snmpd.conf(5)。
snmp源代码的编译(一)
snmp源代码的编译(⼀)/* 获取arm版本库⽂件*/2、解压后执⾏./configure --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi --build=i686-linux --with-cc=arm-none-linux-gnueabi-gcc --with-ar=arm-none-linux-gnueabi-ar --prefix=/home/xxx/net-snmp-5.8/arm_install--with-sys-contact="yourname" --with-sys-location="Shenzhen" --with-default-snmp-version="3" --with-logfile="/var/log/snmpd.log" --with-persistent-directory="/var/net-snmp" --disable-scripts --with-endianness=little --enable-mini-agent --disable-ipv6 --disable- manuals --disable-ucd-snmp-compatibility --enable-as-needed --with-mib-modules="ucd_snmp"有2个snmpd.conf,注意—with-presistent-directory="/var/net-snmp/",该路径下会⽣成snmpd.conf保存的有⽤户信息,加密信息,这个⽬录不要去修改。
3、编译:Make在编译过程中会报错,因为只指定了编译库和主程序以及部分tool时使⽤了交叉编译器,perl部分使⽤的时GCC,并且指定-m64即64位编译,实际上我们所需的东西已经编译完成了。
snmp4j编程简介
Community Target
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.1"))); // ifNumber
pdu.setType(PDU.GETNEXT);
...SNMPv3 GETBULK PDU
import org.snmp4j.ScopedPDU;
import org.snmp4j.smi.*;
示例代码如下:(摘自API文档)
SNMPv1/v2c GETNEXT PDU
import org.snmp4j.PDU;
import org.snmp4j.smi.*;
...
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1"))); // sysDescr
org.snmp4j.Snmp
All Implemented Interfaces:
java.util.EventListener, CommandResponder, Session
snmp类是SNMP4J的核心,它提供了发送和接收SNMP PDUs的方法,所有的SNMP PDU 类型都可以采用同步或者异步的方式被发送。
netsnmp源码编译
netsnmp源码编译一、介绍netsnmp是一个高性能、多协议的网络管理工具箱,其源码提供了丰富的功能和灵活的配置选项。
本文将详细介绍netsnmp源码编译的过程,包括环境搭建、依赖项安装、编译和安装等步骤,帮助读者了解如何在自己的环境中编译和定制netsnmp 库。
二、环境搭建在开始编译netsnmp之前,我们需要准备好以下环境: 1. 操作系统:支持Linux、Windows和MacOS等主流操作系统。
2. 编译工具链:对于Linux环境,我们可以使用gcc、make等工具,Windows环境下可以使用MinGW或者MSYS2等工具。
3.相关依赖项:netsnmp的编译过程需要一些依赖库的支持,如openssl、zlib等。
三、依赖项安装1.安装openssl:打开终端,执行以下命令安装openssl。
$ sudo apt-get install libssl-dev2.安装zlib:同样在终端中执行以下命令安装zlib。
$ sudo apt-get install zlib1g-dev四、获取netsnmp源码1.下载源码包:打开网页浏览器,进入netsnmp官方下载地址(),选择最新的稳定版本,下载源码压缩包。
2.解压源码包:使用压缩工具将源码包解压到指定目录,如/home/user/netsnmp。
五、编译和安装1.配置环境:打开终端,进入netsnmp源码目录。
$ cd /home/user/netsnmp2.运行configure命令:执行以下命令,配置netsnmp的编译选项。
$ ./configure --prefix=/usr/local/netsnmp --with-default-snmp-version="2" --wi th-sys-contact="*****************"--with-sys-location="Unknown"--with-logfil e="/var/log/snmpd.log" --with-persistent-directory="/var/net-snmp" --with-mib-modules="host mibII/mta_sendmail"参数说明: - --prefix:指定安装目录。
Java实现SNMP(简单网络管理协议)基本使用
Java实现SNMP(简单网络管理协议)基本使用Java实现SNMP(简单网络管理协议)基本使用分类: Java 2012-09-20 16:27 492人阅读评论(1) 收藏举报在某些应用中,我们可能会涉及SNMP简单网络管理协议来获取某个网络设备上一些信息,达到数据监控的目的。
下面简单的总结自己使用SNMP的点点东西。
依赖snmp4j jar包,下载相关包添加到自己的工程中。
首先已经拥有自己的目的机器,并且机器上要配置好相关的服务。
下面假设服务所在地址为192.168.1.xxx,端口为161。
首先初始化snmp:// 设置管理进程的IP和端口Address targetAddress = GenericAddress.parse("udp:192.168.1.xxx/161");TransportMapping transport = new DefaultUdpTransportMapping();Snmp snmp = new Snmp(transport);USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);SecurityModels.getInstance().addSecurityModel(usm);transport.listen();设置连接用户:snmp.getUSM().addUser(new OctetString("ray"),new UsmUser(new OctetString("ray"), AuthMD5.ID,new OctetString("xxx"), PrivDES.ID,new OctetString("xxx")));设置 target// CommunityTarget target = new CommunityTarget();UserTarget target = new UserTarget();target.setAddress(targetAddress);target.setRetries(2);// 通信不成功时的重试次数target.setTimeout(1500); // 超时时间target.setVersion(SnmpConstants.version3); // snmp版本target.setSecurityLevel(SecurityLevel.AUTH_PRIV);target.setSecurityName(new OctetString("ray"));创建 PDU// PDU pdu = new PDU();PDU pdu = new ScopedPDU();// pdu.setRequestID((new Integer32(1234)));pdu.setErrorIndex(2);// pdu.add(new VariableBinding(new// OID(".1.3.6.1.4.1.15227.1.3.1.1.1.0"),// new OctetString("cpuUsage")));pdu.add(new VariableBinding(new OID(".1.3.6.1.4.1.15227.1.4.1.1.1.0")));....pdu.setType(PDU.GET);//数据获取方式为GET向Agent发送PDU,并接收ResponseResponseEvent respEvnt = snmp.send(pdu, target);if (respEvnt != null && respEvnt.getResponse() != null) {Vector<VariableBinding> recVBs = (Vector<VariableBinding>) respEvnt.getResponse().getVariableBindings();for (int i = 0; i < recVBs.size(); i++) {VariableBinding recVB = recVBs.elementAt(i);System.out.println((recVB.getOid().toString()+"-"+recVB.getVariable().toString());//打印下相应节点的值,看是否正确获取} }。
snmp walk 编码规则 -回复
snmp walk 编码规则-回复SNMP(Simple Network Management Protocol)是一种用于管理和监控网络设备的协议。
其中,SNMP walk是一种常用的SNMP操作,用于获取设备上的所有SNMP对象。
在SNMP walk中,SNMP编码规则起着重要的作用。
这些规则定义了SNMP协议中数据的传输格式和解析方式。
本文将一步一步回答关于SNMP walk编码规则的问题,并介绍SNMP walk的原理和用途。
首先,我们需要了解SNMP编码规则的基本概念和术语。
在SNMP协议中,数据被组织成一个由一系列SNMP对象(也称为MIB对象)组成的树形结构。
每个SNMP对象都有一个唯一的标识符,称为OID(Object Identifier)。
OID由一系列整数值组成,用来表示SNMP对象的位置。
现在我们来回答下一个问题:SNMP walk是什么?SNMP walk是一种SNMP操作,用于获取设备上的所有SNMP对象。
它通过从根节点开始,递归地遍历整个SNMP树形结构,获取所有的SNMP对象的值。
这个过程被称为SNMP walk,因为它类似于沿着树枝行走并收集树叶的过程。
接下来,我们来回答下一个问题:SNMP walk的编码规则有哪些?SNMP walk的编码规则可以分为以下几个步骤:1. 建立SNMP会话:首先,需要建立一个SNMP会话来与目标设备进行通信。
这可以通过使用SNMP协议栈和SNMP库来实现。
2. 获取树形结构:在SNMP walk中,首先需要获取整个SNMP树形结构的根节点。
根节点的OID通常为".1"。
通过发送一个SNMP GetNext 请求,可以获取根节点的下一个OID。
3. 遍历SNMP树形结构:一旦获取到根节点的下一个OID,就可以开始遍历整个SNMP树形结构。
遍历过程中,每次都会发送一个SNMP GetNext请求来获取下一个OID的值。
SNMP协议及编程实现
1. bool Start(HWND hWnd, UINT wMsg);—启动Snmp,指定消息回送的目标窗口句柄 2. bool Send(LPCSTR strDstIP, smiINT nActionType, const char* pCommunity, _ CStringArray* pOidArray, smiLPVALUE pValueArray);—发送SNMP命令,读取指 定的OID变量值 3. bool Receive(CStringArray* pOidArray, CStringArray* pValueArray);—接收代理回送 的变量值 4. bool Register(HWND hWnd);—注册SNMPTrap服务,指定SNMP控制台的窗口句柄
snmp协议可用于控制各种设备可接入网络且需要控制的设备基于tcpip的网络管理的四个组成部分管理信息库mib包含代理进程可能被查询或修改的所有参数即被管理对象的参数
计算机网络编程简单实现SNMP
计算机网络编程简单实现S N M P-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN课程设计任务书2009—2010学年第一学期专业:计算机应用技术学号:姓名:课程设计名称:计算机网络课程设计设计题目:编程简单实现SNMP完成期限:自 2009 年 12 月 7日至 2009 年 12 月 14 日共 1 周设计目的: SNMP是简单网络管理协议,主要用来管理网络设备到目前为止几乎所有的网络产品都要为其提供支持,以方便管理员的管理和软件开发人员的开发。
我们来研究有关SNMP编程,以便更好的运用。
功能要求:程序能够用SNMP编程实验管理网络设备。
一、设计的任务:熟悉SNMP的基本理论,基于VC++6.0下,有关SNMP编程的过程及API函数的用法。
二、开发工具: C++ 语言三、进度安排:四、主要参考资料:[1]岑贤道. 网络管理协议及应用开发[M].清华大学出版社.1998.[2]邢国光. 简单网络管理协议的理论与实践[M].国防工业出版社.1999.[3]陈庆章. 网络原理与技术[M].高等教育出版社. 2005[4]晏国晟. 简单网络管理 [M].清华大学出版社.2004[5] 谭浩强. 程序设计(第二版)[M].清华大学出版社,2000指导教师(签字):教研室主任(签字):批准日期:年月日摘要SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。
随后,人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB:体系结构,改进后的协议就是着名的SNMP。
SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准网络管理框架的影响也很大。
现在SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。
使用Java进行SNMP编程-SNMP4J-代码实例
使用SNMP4J可以很方便的实现一个SNMP NMS的功能。
对于SNMPv1/SNMPv2,简单的说,只需要以下几个步骤1) 创建Snmp对象snmp2) 创建CommunityTarget对象target,并指定community, version, address, timeout, retry等参数。
3) 创建PDU对象pdu,并指定操作类型(GET/GETNEXT/GETBULK/SET),添加VariableBinding(也就是待操作的OID),如果是GETBULK操作,还可以指定MaxRepetitions和NonRepeaters。
注意一定要指定MaxRepetitions,默认值是0,那样不会返回任何结果。
4) 调用snmp.send(pdu, target)方法,发送请求请返回结果。
此外,SNMP4J提供了TableUtils类,可以很轻松的实现一个SNMP Walk的功能,比如一次返回一个表格下面的所有MIB值。
TableUtils类还支持指定ower bound index 和 upper bound index,得到更小范围的结果以提高性能。
这一点对于从一个很多行的表中取一部分行的数据来说很重要。
Snmp还支持异步的send方法。
下面的代码实例实现了GET, GETNEXT, GETBULK, Walk, SET操作,以及一个利用异步send方法实现的agent discovery:对一个广播地址发送请求,等待agent返回的应答。
如果需要对一个范围内的IP进行扫描,可以稍加改进,反复调用异步send多次发送给不同IP。
[java]view plaincopyprint?1.import java.io.IOException;2.import java.util.List;3.import java.util.Vector;4.5.import munityTarget;6.import org.snmp4j.PDU;7.import org.snmp4j.Snmp;8.import org.snmp4j.event.ResponseEvent;9.import org.snmp4j.event.ResponseListener;10.import org.snmp4j.mp.SnmpConstants;11.import org.snmp4j.smi.OID;12.import org.snmp4j.smi.OctetString;13.import org.snmp4j.smi.UdpAddress;14.import org.snmp4j.smi.VariableBinding;15.import org.snmp4j.transport.DefaultUdpTransportMapping;16.import org.snmp4j.util.DefaultPDUFactory;17.import org.snmp4j.util.TableEvent;18.import org.snmp4j.util.TableUtils;19.20.public class SNMPv2Test {21. public static void main(String[] args) throws IOException, InterruptedException {22. Snmp snmp = new Snmp(new DefaultUdpTransportMapping());23. snmp.listen();24.25. CommunityTarget target = new CommunityTarget();26. target.setCommunity(new OctetString("public"));27. target.setVersion(SnmpConstants.version2c);28. target.setAddress(new UdpAddress("192.168.0.100/161"));29. target.setTimeout(3000); //3s30. target.setRetries(1);31.32. sendRequest(snmp, createGetPdu(), target);33. sendRequest(snmp, createGetNextPdu(), target);34. sendRequest(snmp, createGetBulkPdu(), target);35. snmpWalk(snmp, target);36.37. target.setCommunity(new OctetString("private"));38. sendRequest(snmp, createSetPdu(), target);39.40. CommunityTarget broadcastTarget = new CommunityTarget();41. broadcastTarget.setCommunity(new OctetString("public"));42. broadcastTarget.setVersion(SnmpConstants.version2c);43. broadcastTarget.setAddress(new UdpAddress("192.168.0.255/161"));44. broadcastTarget.setTimeout(5000); //5s45. sendAsyncRequest(snmp, createGetNextPdu(), broadcastTarget);46. Thread.sleep(6000); //main thread wait 6s for the completion of asynchronous request47. }48.49. private static PDU createGetPdu() {50. PDU pdu = new PDU();51. pdu.setType(PDU.GET);52. pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.3.0"))); //sysUpTime53. pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.5.0"))); //sysName54. pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.5"))); //expectan no_such_instance error55. return pdu;56. }57.58. private static PDU createGetNextPdu() {59. PDU pdu = new PDU();60. pdu.setType(PDU.GETNEXT);61. pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.3"))); //sysUpTime62. pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.5"))); //sysName63.64. return pdu;65. }66.67. private static PDU createGetBulkPdu() {68. PDU pdu = new PDU();69. pdu.setType(PDU.GETBULK);70. pdu.setMaxRepetitions(10); //must set it, default is 071. pdu.setNonRepeaters(0);72. pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1"))); //system73. return pdu;74. }75.76. private static PDU createSetPdu() {77. PDU pdu = new PDU();78. pdu.setType(PDU.SET);79. pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.5.0"), new OctetString("sysname"))); //sysName80. return pdu;81. }82.83. private static void sendRequest(Snmp snmp, PDU pdu, CommunityTarget target)84. throws IOException {85. ResponseEvent responseEvent = snmp.send(pdu, target);86. PDU response = responseEvent.getResponse();87.88. if (response == null) {89. System.out.println("TimeOut...");90. } else {91. if (response.getErrorStatus() == PDU.noError) {92. Vector<? extends VariableBinding> vbs = response.getVariableBindings();93. for (VariableBinding vb : vbs) {94. System.out.println(vb + " ," + vb.getVariable().getSyntaxString());95. }96. } else {97. System.out.println("Error:" + response.getErrorStatusText());98. }99. }100. }101.102. private static void sendAsyncRequest(Snmp snmp, PDU pdu, CommunityTarget target)103. throws IOException {104. snmp.send(pdu, target, null, new ResponseListener(){105.106.@Override107. public void onResponse(ResponseEvent event) {108. PDU response = event.getResponse();109. System.out.println("Got response from " + event.getPeerAddre ss());110. if (response == null) {111. System.out.println("TimeOut...");112. } else {113. if (response.getErrorStatus() == PDU.noError) {114. Vector<? extends VariableBinding> vbs = response.get VariableBindings();115. for (VariableBinding vb : vbs) {116. System.out.println(vb + " ," + vb.getVariable().getSyntaxString());117. }118. } else {119. System.out.println("Error:" + response.getErrorStatu sText());120. }121. }122. }});123. }124.125. private static void snmpWalk(Snmp snmp, CommunityTarget target) { 126. TableUtils utils = new TableUtils(snmp, new DefaultPDUFactory(PDU.GE TBULK));//GETNEXT or GETBULK127. utils.setMaxNumRowsPerPDU(5); //only for GETBULK, set max-repetitions, default is 10128. OID[] columnOids = new OID[] {129. new OID("1.3.6.1.2.1.1.9.1.2"), //sysORID130. new OID("1.3.6.1.2.1.1.9.1.3"), //sysORDescr131. new OID("1.3.6.1.2.1.1.9.1.5") //wrong OID, expect an null in in VariableBinding array132. };133. // If not null, all returned rows have an index in a range (lowerBou ndIndex, upperBoundIndex]134. List<TableEvent> l = utils.getTable(target, columnOids, new OID("3") , new OID("10"));135. for (TableEvent e : l) {136. System.out.println(e);137. }138. }139.}对于SNMPv3,不同点有1) 需要创建USM对象并添加User,关于USM->/fw0124/article/details/85570292) 需要创建UserTarget对象,而不是创建CommunityTarget对象。
java snmp用法
SNMP(Simple Network Management Protocol)是一种网络管理协议,用于管理和监控网络设备。
Java可以使用SNMP4J库来与SNMP 设备进行通信。
以下是一个基本的Java SNMP用法示例:1. 引入SNMP4J库```javaimport org.snmp4j.*;import org.snmp4j.mp.SnmpConstants;import org.snmp4j.smi.*;import org.snmp4j.transport.*;import org.snmp4j.util.*;```2. 创建SNMP引擎```javaDefaultSnmpEngine snmpEngine = new DefaultSnmpEngine();```3. 创建目标(Target)和版本(Version)```javaCommunityAddress target = new CommunityAddress(new OctetString(SnmpConstants.publicCommunity));target.setAddress(new UdpAddress("192.168.1.100/161")); // 设置IP地址和端口号Version version = SnmpConstants.version2c; // 设置SNMP版本```4. 创建消息(Message)和请求(Request)```javaMessage message = new Message(version, new OctetString(SnmpEngineID.engineID), new OctetString(target.getCommunity().toHexString()), new PDU(PDU.GET, new OID("1.3.6.1.2.1.1.1"))); // 设置消息和PDU(协议数据单元)GetRequest request = new GetRequest(); // 创建请求对象request.setMessage(message); // 设置消息```5. 发送请求并获取响应```javatry {Response response = snmpEngine.getDispatcher().send(request); // 发送请求PDU pdu = response.getPDU(); // 获取响应的PDUif (pdu != null) {VariableBinding[] varBindings = pdu.getVariableBindings(); // 获取变量绑定数组for (VariableBinding varBinding : varBindings) {System.out.println(varBinding.getOid() + " = " + varBinding.getVariable()); // 输出结果}}} catch (Exception e) {e.printStackTrace();} finally {snmpEngine.shutdown(); // 关闭SNMP引擎}```这是一个简单的SNMP GET请求示例,可以根据需要修改和扩展。
SNMP管理系统器编程
一、课程设计目的以及要求1)课程设计目的随着网络规模的不断扩大,网络结构也变得越来越复杂。
用户对网络应用的需求不断提高,企业和用户对计算机网络的依赖程度也越来越高。
在这种情况下,企业的管理者和用户对网络的性能、运行状况以及安全性也越来越重视。
一个有效且实用的网络每时每刻都离不开网络管理。
网络管理是监督、组织和控制网络通信服务和信息处理所必需的各种活动的总称。
除了专门的标准化组织制定了一些标准外,一些网络发展比较早的机构与厂家也制定了一些在各自网络上应用的管理标准,其中应用最广泛的是简单网络管理协议(Simple Network Management Protocol,SNMP)。
SNMP 是由 IETF 提出的面向 Internet的管理协议,其管理对象包括网桥、路由器、交换机等存和处理能力有限的网络互连设备。
SNMP 由于其简单性得到了业界广泛的支持,成为目前最流行的网络管理协议。
本课程设计的目的是通过编程实现 SNMP 协议,从而加深对 SNMP 协议的理解。
2)课程设计要求熟悉 SNMP 协议后,按如下要求编写程序,实现 SNMP 协议,获取路由器中的相关信息。
A)采用 VC 6.0 进行编程。
B)根据某路由器的 IP 及共同体名,获得该路由器的系统信息。
C)获取路由器的 IP 地址信息以及路由表信息;二、原理分析网管系统是指课管理真个网络及其中的网络设备的软件系统。
网管系统设计4个方面的容:网管功能、资源、信息及结构。
其中,网管功能由ISO网络管理功能域定义:网管资源的表示涉及资源的表示方法,主要包括网络中硬件,软件与服务等资源;网管信息的表示方法与传输方式,由网管系统采用的网络管理协议决定;网管系统的结构主要包括两层结构与三层结构。
SNMP网管系统采用客户机/服务器工作模式。
SNMP网管系统包括两个组成部分:SNMP客户机与SNMP服务器。
其中,SNMP客户机是SNMP服务的请求者,他安装在网管管理工作站中,通常被称为SNMP管理器:SNMP服务器是SNMP服务的响应者,它安装在支持SNMP服务的网络设备中,通常被称为SNMP代理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SNMP 编程第一章SNMP概述一、本部分目的:了解SNMP协议的主要内容,学会使用WMI 或Windows SNMP API 对可网管交换机、服务器主机进行简单管理。
二、本部分参考资料:RFC 1157:A Simple Network Management Protocol (SNMP)RFC 1213:SNMP MIB IIWindows Platform SDK:SNMP API DocumentationASN.1 Site / OID Tree Display/ ISO SubTree DisplayOID SysDescr SubTreeMIB IndexOID FAQ三、本部分工具:SnmputilMIB Browser and CompilerSNMP Development LinkMulti Router Traffic Grapher(MRTG)第一章概念1 ASN.1(Abstract Syntax Notation number One)is a standard that defines a formalism for the specification of abstract data types2 SNMP(Simple Network Management Protocol)SNMP (简单网络管理协议) 是目前在计算机网络中用得最广泛的网络管理协议, 该协议是基于TCP/IP 的网管标准, 它包括协议本身、数据库的定义和相关概念。
可管理对象包括主机、交换机、路由器等。
3 ITU-T(International Telecommunication Union -Telecommunication Standardization Sector)is the telecom standardization organization of the International Telecommunication Union4 OID(Object Identification)一组用句点分隔的数字序列,用于唯一地标识SNMP受管理对象。
它反映了对象间所处的层次关系。
5 PDU (Protocol Data Unit)Manager与agent间依照SNMP协议进行通讯时的信息单位。
SNMP有5种PDU:GetRequest-PDU、GetNextRequest-PDU、GetResponse-PDU、SetRequest-PDU、Trap-PDU6第二章基于SNMP 的网络管理原理SNMP 的管理系统为管理器(manager)/代理(agent)模式。
包括manager,agent,managenment information base(MIB),网络协议以及被管理对象。
管理程序提供用户界面,agent接受manager的指令(通过SNMP协议)并获取物理设备信息返回给manager,此外,当被管理对象发生严重问题或事件时,agent向manager发送通知消息(TRAP)。
Manager与agent使用MIB标识被管理对象元素。
如下图所示:SNMP基于UDP,manager与agent交互时使用的UDP端口如下所示:只要是可网管交换机(一般都支持SNMP V1协议)、路由器、安装了SNMP协议组件的Windows 系统主机(Windows 2000/XP/2003),都已有了SNMP 系统的agent 部分,可通过网络管理应用程序对它们进行管理。
安装了SNMP服务的Windows 主机,在winroot\system32目录下有如下MIB:MIB DescriptionDHCP.MIB Microsoft-defined MIB that contains object types for monitoring thenetwork traffic between remote hosts and DHCP serversHOSTMIB.MIB Contains object types for monitoring and managing host resourcesLMMIB2.MIB Covers workstation and server servicesMIB_II.MIB Contains the Management Information Base (MIB-II), which provides asimple, workable architecture and system for managing TCP/IP-basedinternetsWINS.MIB Microsoft-defined MIB for the Windows Internet Name Service (WINS)MIB是一个树型结构,每个节点表示一个对象或属性,用一串数字序列形式的OID(Object Identifier)表示。
RFC 1213 定义了SNMP MIB II (1.3.6.1.2.1 以下)的OID 子树。
Other MIB•ATM MIB (RFC 2515)•Frame Relay DTE Interface Type MIB (RFC 2115)•BGP Version 4 MIB (RFC 1657)•RDBMS MIB (RFC 1697)•RADIUS Authentication Server MIB (RFC 2619)•Mail Monitoring MIB (RFC 2789)•DNS Server MIB (RFC 1611)SNMP 使用5个命令进行manager与agent间的交流。
分别是Get、GetNext、GetResponse、Set及Trap。
Get及GetNext允许manager请求被管理对象的某个属性或状态,当agent接收到这些命令后,应以GetResponse回应并返回所请求属性或出错信息。
Trap命令允许agent自动通知manager所发生的重要事件。
MIB 是一个可扩充的数据库,用户可以根据自己的情况对标准(现有)的MIB 进行扩充。
例:CISCO 2900系列交换机扩充MIB分支:1.3.6.1.4.1.9.9.87MG-Soft MIB Browser 应用MG-Soft MIB Browser是一个MIB浏览器,可用于查看Agent中MIB库所标识的任何一个管理元素的值。
实例:查看交换机的端口流量光纤口的流入量累计OID=iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifInOctets(10).25在两个时间t2、t1分别对端口流入累计量进行采样,可计算出流入指定端口的流量:ifInOctets2+ ifInErrors2–(ifInOctets1+ ifInErrors1)t2 -t1端口流入和流出量的对比图(单位Octet/s):iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifInOctets(10).25 iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1).ifOutOctets(16).25iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2).ifEntry(1) 节点的表格视图:第三章WMI 与SNMPWMI 通过SNMP Provider 使应用程序存取设备的SNMP 信息。
SNMP Provider 在缺省情形下并没有安装。
安装方法:安装Simple Network Management Protocol and WMI SNMP Provider组件。
参见:Setting up the WMI SNMP Environment如果不做上述配置,则在WMI Tools界面中无法查询MIB II中的SNMP数据,但脚本程序仍然可以查询MIB II SNMP数据。
An SNMP collection maps to a CIM class and the elements of a collection map to the properties of a CIM classSNMP MIB II集合影射为SNMP_RFC1213_MIB_为前缀的对应WMI类,其中的元素则影射为类的属性.类的名字空间为\root\snmp\localhost例如:System 集合iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1) 影射为SNMP_RFC1213_MIB_system 类ifTable集合iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).interfaces(2).ifTable(2) 影射为WMI类SNMP_RFC1213_MIB_ifTable因此,要查询指定OID的对象属性,只要查询对应的WMI SNMP_RFC1213_MIB 类即可。
strTargetSnmpDevice="localhost"Set objWmiLocator= CreateObject("WbemScripting.SWbemLocator")‘NULL string "" stands for localhostSet objWmiServices= objWmiLocator.ConnectServer("", "root\snmp\localhost") Set objWmiNamedValueSet=CreateObject("WbemScripting.SWbemNamedValueSet") objWmiNamedValueSet.Add"AgentAddress", strTargetSnmpDevice objWmiNamedValueSet.Add"AgentReadCommunityName", “hello"Set colSystem=objWmiServices.InstancesOf("SNMP_RFC1213_MIB_system", , _ objWmiNamedValueSet)For Each objSystem In colSystemWScript.Echo"sysDescr: " & objSystem.sysDescrNext以上代码查询本地主机的sysDecr属性(1.3.6.1.2.1.1.1)以上代码中将strTargetSnmpDevice地址该为远程网络设备地址,则可查询远程设备的MIB II网络信息。