有推荐的snmp协议赛车模拟器 通用协议吗

义项指多义词的不同概念,如的义项:网球运动员、歌手等;的义项:冯小刚执导电影、江苏卫视交友节目等。
所属类别 :
网络管理(SNMP),由一组网络管理的组成,一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资料物件。
外文名称 Simple Network Management Protocol
计算机/计算机网络
简单协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资料物件。该协议能够支持网络,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(IETF,Internet Engineering Task Force)定义的internet协议簇的一部分。
请参考本词条结尾的扩展阅读条目“简单网络管理协议(SNMP)基本元件和架构”。
在典型的SNMP用法中,有许多被管理,而且是有一或多个系统在它们。每一个被管理的系统上又运行一个叫做代理者(agent)的软件元件,且通过SNMP对管理系统报告资讯。基本上,SNMP代理者以变量呈现管理资料。管理系统透过GET,GETNEXT和GETBULK协定指令取回资讯,或是代理者在没有被的情况下,使用TRAP或INFORM传送资料。管理系统也可以传送配置更新或控制的请求,透过SET协定指令达到主动管理系统的目的。配置和控制指令只有当网络基本结构需要改变的时候使用,而监控指令则通常是常态性的工作。可透过SNMP存取的变量以阶层的方式结合。这些分层和其他元数据(例如变量的类型和描述)以管理信息库(MIBs)的方式描述。
第一版SNMP第一版和SMI规格的资料型态SNMP第一版SMI指定许多SMI规格的资料型态,它们被分为两大类:简单资料型态泛应用资料型态SNMPv1使用基于团体名进行报文认证第二版SNMP第二版和管理资讯结构SNMP第二版SMI在RFC 2578之中描述,它在SNMP第一版的SMI规格资料型态上进行增加和强化,例如位元串(bit strings)、网络位址(network addresses)和计数器(counters)。SNMP协定在OSI模型的应用层(第七层)运作,在第一版中指定五种核心PDU:GET REQUESTGET NEXT REQUESTGET RESPONSESET REQUESTTRAP其他PDU在SNMP第二版加入,包含:GETBULK REQUESTINFORMSNMP第二版SMI资讯模块SNMP第二版SMI也指定了资讯模块来详细说明一群相关连的定义。有三种SMI资讯模块:MIB模块、回应状态、能力状态。第三版SNMP第三版SNMP第三版由RFC 3411-RFC 3418定义,主要增加SNMP在安全性和远端配置方面的强化。SNMP第三版提供重要的安全性功能:信息完整性:保证封包在传送中没有被篡改。认证:检验信息来自正确的来源。封包加密:避免被未授权的来源窥探。SNMPv3定义了基于用户的安全模型,使用共享密钥进行报文认证。
MIB,Management Information Base:管理信息库,由网络管理协议访问的管理对象数据库,它包括SNMP可以通过网络设备的SNMP管理代理进行设置的变量。SMI,Structure of Management Information:管理信息结构,用于定义通过网络管理协议可访问的对象的规则。SMI定义在MIB中使用的及网络资源在MIB中的名称或表示。使用SNMP进行网络管理需要下面几个重要部分:管理基站,管理代理,管理信息库和网络管理工具。管理基站通常是一个独立的设备,它用作网络管理者进行网络管理的用户接口。基站上必须装备有,管理员可以使用的用户接口和从MIB取得信息的数据库,同时为了进行网络管理它应该具备将管理命令发出基站的能力。管理代理是一种网络设备,如主机,网桥,路由器和集线器等,这些设备都必须能够接收管理基站发来的信息,它们的状态也必须可以由管理基站监视。管理代理响应基站的请求进行相应的操作,也可以在没有请求的情况下向基站发送信息。MIB是对象的集合,它代表网络中可以管理的资源和设备。每个对象基本上是一个数据变量,它代表被管理的对象的一方面的信息。最后一个方面是管理协议,也就是SNMP,SNMP的基本功能是:取得,设置和接收代理发送的意外信息。取得指的是基站发送请求,代理根据这个请求回送相应的数据,设置是基站设置管理对象(也就是代理)的值,接收代理发送的意外信息是指代理可以在基站未请求的状态下向基站报告发生的意外情况。SNMP为应用层协议,是TCP/IP协议族的一部分。它通过用户数据报协议(UDP)来操作。在分立的管理站中,管理者进程对位于管理站中心的MIB的访问进行控制,并提供网络管理员接口。管理者进程通过SNMP完成网络管理。SNMP在UDP、IP及有关的特殊网络协议(如,Ethernet, FDDI, X.25)之上实现。
接入Internet的网络面临许多风险,Web服务器可能面临攻击,的安全也令人担忧。但除此之外,网络上可能还存在一些隐性的漏洞。大多数网络总有一些设备运行着SNMP服务,许多时候这些SNMP服务是不必要的,但却没有引起网络管理员的重视。根据SANS协会的报告,对于接入Internet的主机,SNMP是威胁安全的十大首要因素之一;同时,SNMP还是Internet主机上最常见的服务之一。特别地,SNMP服务通常在位于网络边缘的设备(防火墙保护圈之外的设备)上运行,进一步加剧了SNMP带来的风险。这一切听起来出人意料,但其实事情不应该是这样的。背景知识SNMP开发于九十年代早期,其目的是简化大型网络中设备的管理和数据的获取。许多与网络有关的软件包,如HP的Open View和Nortel Networks的Optivity Network Management System,还有Multi Router Traffic Grapher(MRTG)之类的,都用SNMP服务来简化网络的管理和维护。由于SNMP的效果实在太好了,所以网络硬件厂商开始把SNMP加入到它们制造的每一台设备。今天,各种网络设备上都可以看到默认启用的SNMP服务,从交换机到路由器,从防火墙到,无一例外。仅仅是分布广泛还不足以造成威胁,问题是许多厂商安装的SNMP都采用了默认的通信字符串(例如密码),这些通信字符串是程序获取设备信息和修改配置必不可少的。采用默认通信字符串的好处是网络上的软件可以直接访问设备,无需经过复杂的配置。通信字符串主要包含两类命令:GET命令,SET命令。GET命令从设备读取数据,这些数据通常是操作参数,例如连接状态、接口名称等。SET命令允许设置设备的某些参数,这类功能一般有限制,例如关闭某个网络接口、修改路由器参数等功能。但很显然,GET、SET命令都可能被用于拒绝服务攻击(DoS)和恶意修改网络参数。最常见的默认通信字符串是public(只读)和private(读/写),除此之外还有许多厂商私有的默认通信字符串。几乎所有运行SNMP的网络设备上,都可以找到某种形式的默认通信字符串。SNMP2.0和SNMP1.0的安全机制比较脆弱,通信不加密,所有通信字符串和数据都以明文形式发送。攻击者一旦捕获了网络通信,就可以利用各种嗅探工具直接获取通信字符串,即使用户改变了通信字符串的默认值也无济于事。近几年才出现的SNMP3.0解决了一部分问题。为保护通信字符串,SNMP3.0使用DES(DataEncryptionStandard)算法加密数据通信;另外,SNMP3.0还能够用MD5和SHA(SecureHashAlgorithm)技术验证节点的,从而防止攻击者冒充管理节点的身份操作网络。虽然SNMP3.0出现已经有一段时间了,但目前还没有广泛应用。如果设备是2、3年前的产品,很可能根本不支持SNMP3.0;甚至有些较新的设备也只有SNMP2.0或SNMP1.0。即使设备已经支持SNMP3.0,许多厂商使用的还是标准的通信字符串,这些字符串对黑客组织来说根本不是秘密。因此,虽然SNMP3.0比以前的版本提供了更多的安全特性,如果配置不当,其实际效果仍旧有限。禁用SNMP要避免SNMP服务带来的安全风险,最彻底的办法是禁用SNMP。如果你没有用SNMP来管理网络,那就没有必要运行它;如果你不清楚是否有必要运行SNMP,很可能实际上不需要。即使你打算以后使用SNMP,只要现在没有用,也应该先禁用SNMP,直到确实需要使用SNMP时才启用它。下面列出了如何在常见的平台上禁用SNMP服务。■Windows XP和Windows 2000在XP和Win2K中,右击“我的电脑”,选择“管理”。展开“服务和”、“服务”,从服务的清单中选择SNMP服务,停止该服务。然后打开服务的“属性”,将启动类型改为“禁用”(按照微软的默认设置,Win2K/XP默认不安装SNMP服务,但许多软件会自动安装该服务)。■WindowsNT4.0选择“开始”→“设置”,打开服务设置程序,在服务清单中选择SNMP服务,停止该服务,然后将它的启动类型改为禁用。■Windows9x打开的网络设置程序,在“配置”页中,从已安装的组件清单中选择“MicrosoftSNMP代理”,点击“删除”。检查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run注册键,确认不存在snmp.exe。■Cisco Systems硬件对于Cisco的网络硬件,执行“noSNMP-server”命令禁用SNMP服务。如果要检查SNMP是否关闭,可执行“showSNMP”命令。这些命令只适用于运行CiscoIOS的平台;对于非IOS的Cisco设备,请参考随机文档。■HP硬件对于所有使用Jet Direct卡(绝大部分HP网络打印机都使用它)的HP网络设备,用telnet连接到Jet Direct卡的IP地址,然后执行下面的命令:SNMP-config:0quit这些命令将关闭设备的SNMP服务。但必须注意的是,禁用SNMP服务会影响服务的发现操作以及利用SNMP获取设备状态的端口监视机制。■RedHatLinux对于RedHatLinux,可以用Linuxconf工具从自动启动的服务清单中删除SNMP,或者直接从/etc/services文件删除启动SNMP的行。对于其他Linux系统,操作方法应该也相似。保障SNMP的安全如果某些设备确实有必要运行SNMP,则必须保障这些设备的安全。首先要做的是确定哪些设备正在运行SNMP服务。除非定期对整个网络进行,全面掌握各台机器、设备上运行的服务,否则的话,很有可能遗漏一、二个SNMP服务。特别需要注意的是,、打印机之类的设备同样也会运行SNMP服务。确定SNMP服务的运行情况后,再采取下面的措施保障服务安全。■加载SNMP服务的补丁安装SNMP服务的补丁,将SNMP服务升级到2.0或更高的版本。联系设备的制造商,了解有关安全漏洞和升级补丁的情况。■保护SNMP通信字符串一个很重要的保护措施是修改所有默认的通信字符串。根据设备文档的说明,逐一检查、修改各个标准的、非标准的通信字符串,不要遗漏任何一项,必要时可以联系制造商获取详细的说明。■过滤SNMP另一个可以采用的保护措施是在网络边界上过滤SNMP通信和请求,即在防火墙或边界路由器上,阻塞SNMP请求使用的端口。标准的SNMP服务使用161和162端口,厂商私有的实现一般使用199、391、705和1993端口。禁用这些端口通信后,外部网络访问内部网络的能力就受到了限制;另外,在内部网络的路由器上,应该编写一个ACL,只允许某个特定的可信任的SNMP管理系统操作SNMP。例如,下面的ACL只允许来自(或者走向)SNMP管理系统的SNMP通信,限制网络上的所有其他SNMP通信:access-list 100 permit iphost w.x.y anyaccess-list 100 deny udp any any eq snmpaccess-list 100 deny udp any any eq snmp trapaccess-list 100 permit ip any any这个ACL的第一行定义了可信任管理系统(w.x.y)。利用下面的命令可以将上述ACL应用到所有网络接口:interface serial0ip access-group 100 in总之,SNMP的发明代表着网络管理的一大进步,现在它仍是高效管理大型网络的有力工具。然而,SNMP的早期版本天生缺乏安全性,即使最新的版本同样也存在问题。就象网络上运行的其他服务一样,SNMP服务的安全性也是不可忽视的。不要盲目地肯定网络上没有运行SNMP服务,也许它就躲藏在某个设备上。那些必不可少的网络服务已经有太多让人担忧的安全问题,所以最好关闭SNMP之类并非必需的服务——至少尽量设法保障其安全。
简单网络管理协议(SNMP)是目前TCP/IP网络中应用最为广泛的网络管理协议。1990年5月,RFC1157定义了SNMP(simplenetworkmanagementprotocol)的第一个版本SNMPv1。RFC1157和另一个关于管理信息的文件RFC1155一起,提供了一种监控和管理计算机网络的系统方法。因此,SNMP得到了广泛应用,并成为网络管理的事实上的标准。SNMP在90年代初得到了迅猛发展,同时也暴露出了明显的不足,如,难以实现大量的数据传输,缺少身份验证(Authentication)和加密(Privacy)机制。因此,1993年发布了SNMPv2,具有以下特点:?支持分布式网络管理?扩展了数据类型?可以实现大量数据的同时传输,提高了效率和性能?丰富了故障处理能力?增加了集合处理功能?加强了数据定义语言
管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构,它的根在最上面,根没有名字。图3画的是管理信息库的一部分,它又称为对象命名(objectnamingtree)。对象命名树的顶级对象有三个,即ISO、ITU-T和这两个组织的联合体。在ISO的下面有4个结点,其中的一个(标号3)是被标识的组织。在其下面有一个美国国防部(DepartmentofDefense)的子树(标号是6),再下面就是Internet(标号是1)。在只讨论Internet中的对象时,可只画出Internet以下的子树(图中带阴影的虚线方框),并在Internet结点旁边标注上{1.3.6.1}即可。在Internet结点下面的第二个结点是mgmt(管理),标号是2。再下面是管理信息库,原先的结点名是mib。1991年定义了新的版本MIB-II,故结点名现改为mib-2,其标识为{1.3.6.1.2.1},或{Internet(1).2.1}。这种标识为对象标识符。最初的结点mib将其所管理的信息分为8个类别,见表4。现在demib-2所包含的信息类别已超过40个。应当指出,MIB的定义与具体的网络管理协议无关,这对于厂商和用户都有利。厂商可以在产品(如路由器)中包含SNMP代理软件,并保证在定义新的MIB项目后该软件仍遵守标准。用户可以使用同一网络管理客户软件来管理具有不同版本的MIB的多个路由器。当然,一个没有新的MIB项目的路由器不能提供这些项目的信息。这里要提一下MIB中的对象{1.3.6.1.4.1},即enterprises(企业),其所属结点数已超过3000。例如IBM为{1.3.6.1.4.1.2},Cisco为{1.3.6.1.4.1.9},Novell为{1.3.6.1.4.1.23}等。
SNMP是SimpleNetworkManagementProtocol的缩写,中文含义是简单网络管理协议,这个协议的作用和详细情况,各位可以参考有关资料.这里只介绍针对这个协议进行状态查询的工具软件Snmputilg.exe.也是支持工具目录中所提供的.至于用途,不外乎是给提供关于SNMP方面的信息,便于在排除故障的时候当做参考.打开工具显示界面之后,你就可以用来执行诸如GET,GET-NEXT等等操作或进行有关的设置.另外,这个工具也能将数据保存到,或将数据保存为以逗号为结束符号的文本文件.在使用中应当注意:即使多数对象的都使用了默认的ID标识(数值),你也要谨慎地使用SNMPSET命令,因为不正确地使用这个命令之后,可能导致网络名称资源方面的问题或是在引起连通方面的问题。
1.启动程序:在windows2000的环境中,点击开始-运行,在编辑框中键入snmputilg然后回车或点击确定。2.和以前遇到的不同,Snmputilg.exe是一个图形界面的工具,尽管执行程序的时候可以使用命令行控制窗口打开它,但实际启动成功之后出现的界面仍然是图形的3.工具启动后,Node编辑框中显示的是默认的回送地址,地址值是127.0.0.1;CurrentOID指的是当前对象标识符,标识是windows系统中用来代表一个对象的数字,每个标识都是整个系统中唯一的,也就是说,标识不会、也不允许重复.图中显示的值是.1.3.6.1.2.1.public是community一项的默认选择.上面所介绍的这些项目也可选定别的值。4.如果选择了别的系统的IP地址,则必须运行SNMP服务,而目标系统必须配置好网络访问的地址,所谓配置,包括地址设置和权限打开.同时,所需要的辅助工具也应当具备或运行.缺省情况下,windows2000对所有另外系统的IP地址都是允许访问的。5.另一个问题是community,当选定community的值时,一要注意它所代表的对象必须存在,二要注意其可读属性只有获准许可之后才能进行读操作.三要注意这个项目在windows系列的不同版本中,对访问地址的限制可能不一样。6.凡是SNMP可以执行的功能(SNMPFunctiontoExecute),在图中下拉组合框中都已经列出,可供选择.选择好之后,请鼠标点击ExecuteCommand按钮来执行对应的操作。以下是这些操作的功能简介:GETthevalueofthecurrentobjectidentifier:得到当前对象的ID标识数值。GETtheNEXTvalueafterthecurrentobjectidentifier(thisisthedefault):得到紧接当前对象之后的下一个对象的ID标识数值(这是默认的)GETtheNEXT20valuesafterthecurrentobjectidentifier:得到当前对象之后的20个对象的ID标识数值GETallvaluesfromobjectidentifierdown(WALKthetree):得到从当前对象往下的所有对象的ID标识数值WALKthetreefromWINSvaluesdown:从WINS值往下漫游目录WALKthetreefromDHCPvaluesdown:从DHCP值往下漫游目录WALKthetreefromLANMANvaluesdown:从LANMAN值往下漫游目录WALKthetreefromMIB-IIdown(InternetMIB):从MIB-II往下漫游目录7.显示结果含义解释:这些结果可以清除,也可以保存或更新,要实现上述功能,可以使用菜单中对应的操作,具体地说,这些操作包括:将一个或多个结果拷贝入剪贴板.删除现在列出的所有内容.清除已经执行过的所有的命令.请求记录当前已经选定的项目.产生一个文本文件,用该文件保存所有的记录的映像编辑或设置某个对象的标识.在使用这个操作时要谨慎,因为一旦进行了不正确地设置,将可能导致网络名称资源方面的问题或是在引起连通方面的问题.
Win7开启SNMP协议161端口
1、点击“开始——搜索”,在搜索框中输入“Windows防火墙”,然后回车。2、在打开的“高级安全Windows防火墙”窗口宏,选中“入站规则——新建规则”项。3、在“新建入站规则向导”窗口中,选择“端口”,然后点击“下一步”按钮。4、接着输入需要开启的端口号161,点击“下一步”。5、在操作界面,点击选中“允许连接”选项,点击“下一步”。6、然后在配置文件窗口中,勾选“域”、“专用”、“共用”三个配置文件,点击“下一步”。7、然后点击名称,输入名称和相应的描述,比如名称处输入161,描述处输入MRGT,点击“完成”即可。
SNMPv2标准的核心就是通信协议———它是一个请求/应答式的协议。这个协议提供了在manager与agent、manager与manager之间交换管理信息的直观、基本的方法。每条SNMPv2的报文都由一些域构成:如果发送方、接收方的两个Party都采用了验证(authentication)机制,它就包含与验证有关的信息;否则它为空(取NULL)。验证的过程如下:发送方和接收方的Party都分别有一个验证用的密钥(secretkey)和一个验证用的算法。报文发送前,发送方先将密钥值填入图中digest域,作为报文的前缀。然后根据验证算法,对报文中digest域以后(包括digest域)的报文数据进行计算,计算出一个摘要值(digest),再用摘要值取代密钥,填入报文中的digest域。接收方收到报文后,先将报文中的摘要值取出来,暂存在一个位置,然后用发送方的密钥放入报文中的digest。将这两个摘要值进行比较,如果一样,就证明发送方确实是srcParty域中所指明的那个Party,报文是合法的;如果不一样,接收方断定发送方非法。验证机制可以防止非法用户冒充某个合法Party来进行破坏。authInfo域中还包含两个(timestamp),用于发送方与接收方之间的同步,以防止报文被截获和重发。SNMPv2的另一大改进是可以对通信报文进行加密,以防止监听者窃取报文内容。除了privDst域外,报文的其余部分可以被加密。发送方与接收方采用同样的加密算法(如DES)。通信报文可以不加任何安全保护,或只进行验证,也可以二者都进行。
在CLTS上的映射在CLTS
{{each(i, video) list}}
{{if list.length > 8}}
查看全部 ${list.length} 期节目
{{if _first}}
内容来源于
百科兴趣圈
{{if list && list.length}}
360百科致力于成为最为用户所信赖的专业性百科网站。人人可编辑,让求知更简单。SNMP协议工作原理验证与分析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
SNMP协议工作原理验证与分析
上传于||文档简介
&&自​己​辛​苦​做​的​,​希​望​大​家​稀​饭
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢各种设备SNMP协议的配置_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
各种设备SNMP协议的配置
上传于||文档简介
&&各​种​设​备​S​N​M​P​协​议​的​配​置
你可能喜欢怎么利用snmp4j-agent在PC端模拟snmp服务 - 行业应用当前位置:& &&&怎么利用snmp4j-agent在PC端模拟snmp服务怎么利用snmp4j-agent在PC端模拟snmp服务&&网友分享于:&&浏览:186次如何利用snmp4j-agent在PC端模拟snmp服务
想在PC端起一个snmp模拟器,在网上搜了一段时间,例子也不算少,但一般都有些问题,可能是自己某个地方出错了。
索性直接从源码的example开始,看了几天snmp4j-agent源码后,虽然啥也没看懂,但还是被我找到了一些突破口。
直接将org.snmp4j.agent.example下的例子复制出来,然后修改即可。这几天刚写好的例子,也懒得作修饰了。
1. 将源码中的SampleAgentConfig.properties(org.snmp4j.agent.example下)复制出来。
2. 建立如图的包层次结构
3. 代码明细
SysDate.java
package celul.snmpSeverTest.
import org.snmp4j.agent.mo.MOAccessI
import org.snmp4j.agent.mo.MOS
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetS
public class SysDate extends MOScalar&OctetString& {
public SysDate() {
super(new OID("1.3.6.1.4.1..1.2.0"), MOAccessImpl.ACCESS_READ_ONLY,
new OctetString("com"));
public OctetString getValue() {
return new OctetString("com");
SysInitDevice.java
package celul.snmpSeverTest.
import org.snmp4j.agent.mo.MOAccessI
import org.snmp4j.agent.mo.MOS
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.OID;
public class SysInitDevice extends MOScalar&Integer32& {
public SysInitDevice() {
super(new OID("1.3.6.1.4.1..1.3.0"), MOAccessImpl.ACCESS_READ_WRITE,
new Integer32(3));
public Integer32 getValue() {
return super.getValue();
public int setValue(Integer32 value) {
return super.setValue(value);
SysInitParams.java与SysTimeUp.java不再赘述。
MoTableUtil.java
package celul.snmpSeverTest.
import org.snmp4j.agent.MOA
import org.snmp4j.agent.mo.DefaultMOMutableTableM
import org.snmp4j.agent.mo.DefaultMOT
import org.snmp4j.agent.mo.DefaultMOTableR
import org.snmp4j.agent.mo.MOAccessI
import org.snmp4j.agent.mo.MOC
import org.snmp4j.agent.mo.MOMutableC
import org.snmp4j.agent.mo.MOTableI
import org.snmp4j.agent.mo.MOTableSubI
import org.snmp4j.agent.mo.snmp.RowS
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetS
import org.snmp4j.smi.SMIC
import org.snmp4j.smi.V
import celul.snmpSeverTest.C
public class MoTableUtil{
@SuppressWarnings("rawtypes")
private static DefaultMOTable emuT
private static final String emuTableEntryOid = "1.3.6.1.4.1..1.1.1";
private static final Object[][] columnEmuDefined = {
{ 1, "1", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 2, "2", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 3, "3", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 4, "4", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 5, "5", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 6, "6", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 7, "7", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 8, "8", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 9, "9", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 10, Constant.ROWSTATUS, MOAccessImpl.ACCESS_READ_CREATE, SMIConstants.SYNTAX_INTEGER32 } };
@SuppressWarnings("rawtypes")
private static DefaultMOTable edfaT
private static final String edfaTableEntryOid = "1.3.6.1.4.1..1.2.1";
private static final Object[][] columnEdfaDefined = {
{ 1, "1", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 2, "2", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 3, "3", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 4, "4", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 5, "5", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 6, "6", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 7, "7", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 8, "8", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 9, "9", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 10, "10", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
{ 11, Constant.ROWSTATUS, MOAccessImpl.ACCESS_READ_CREATE, SMIConstants.SYNTAX_INTEGER32 } };
//private static DefaultMOTable defaT
@SuppressWarnings("rawtypes")
public static DefaultMOTable getEmuTable(){
if(emuTable == null){
initEmuTable();
return emuT
@SuppressWarnings("rawtypes")
public static DefaultMOTable getEdfaTable(){
if(edfaTable == null){
initEdfaTable();
return edfaT
@SuppressWarnings({ "rawtypes", "unchecked" })
private static void initEmuTable(){
int columnLength = columnEmuDefined.
MOColumn[] edfaColumns = new MOColumn[columnLength];
for( int i=0; i&columnL i++){
Object[] acol = columnEmuDefined[i];
int index = (Integer) acol[0];
String name = (String) acol[1];
MOAccess access = (MOAccess) acol[2];
int operType = (Integer) acol[3];
Variable valueDefault = new Integer32(1);
if(name.startsWith(Constant.ROWSTATUS)){
edfaColumns[i] = new RowStatus(index);
edfaColumns[i] = new MOMutableColumn&Variable&(index, operType, access, valueDefault, true);
emuTable = new DefaultMOTable(
new OID(emuTableEntryOid),
new MOTableIndex(
new MOTableSubIndex[] {
new MOTableSubIndex(
new OID(emuTableEntryOid + ".1001"),
SMIConstants.SYNTAX_OCTET_STRING, 1, 16) },
edfaColumns,
new DefaultMOMutableTableModel&DefaultMOTableRow&()
@SuppressWarnings({ "rawtypes", "unchecked" })
private static void initEdfaTable(){
int columnLength = columnEdfaDefined.
MOColumn[] edfaColumns = new MOColumn[columnLength];
for( int i=0; i&columnL i++){
Object[] acol = columnEdfaDefined[i];
int index = (Integer) acol[0];
String name = (String) acol[1];
MOAccess access = (MOAccess) acol[2];
int operType = (Integer) acol[3];
Variable valueDefault = new Integer32(1);
if(name.startsWith(Constant.ROWSTATUS)){
edfaColumns[i] = new RowStatus(index);
edfaColumns[i] = new MOMutableColumn&Variable&(index, operType, access, valueDefault, true);
edfaTable = new DefaultMOTable(
new OID(edfaTableEntryOid),
new MOTableIndex(
new MOTableSubIndex[] {
new MOTableSubIndex(
new OID(edfaTableEntryOid + ".1001"),
SMIConstants.SYNTAX_OCTET_STRING, 1, 16) },
edfaColumns,
new DefaultMOMutableTableModel&DefaultMOTableRow&()
@SuppressWarnings("unchecked")
public static void fillDefaultDataIntoEmuTable(){
for (int rowId = 1; rowId & 2; rowId++) {
Variable[] values = new Variable[10];
values[0] = new OctetString("a.0." + rowId);
values[1] = new OctetString("b.0." + rowId);
values[2] = new OctetString("c.0." + rowId);
values[3] = new OctetString("d.0." + rowId);
values[4] = new OctetString("e.0." + rowId);
values[5] = new OctetString("f.0." + rowId);
values[6] = new OctetString("g.0." + rowId);
values[7] = new OctetString("h.0." + rowId);
values[8] = new OctetString("i.0." + rowId);
values[9] = new Integer32(rowId);
emuTable.addRow(new DefaultMOTableRow(new OID("1.0." + rowId),
@SuppressWarnings("unchecked")
public static void fillDefaultDataIntoEdfaTable(){
for (int rowId = 1; rowId & 5; rowId++) {
Variable[] values = new Variable[11];
values[0] = new OctetString("edfa.a.0." + rowId);
values[1] = new OctetString("edfa.b.0." + rowId);
values[2] = new OctetString("edfa.c.0." + rowId);
values[3] = new OctetString("edfa.d.0." + rowId);
values[4] = new OctetString("edfa.e.0." + rowId);
values[5] = new OctetString("edfa.f.0." + rowId);
values[6] = new OctetString("edfa.g.0." + rowId);
values[7] = new OctetString("edfa.h.0." + rowId);
values[8] = new OctetString("edfa.i.0." + rowId);
values[9] = new OctetString("edfa.j.0." + rowId);
values[10] = new Integer32(rowId);
edfaTable.addRow(new DefaultMOTableRow(new OID("1.0." + rowId),
Constant.java
public class Constant {
public static final String ROWSTATUS="rowStatus";
主要入口snmp4jAgent.java
package celul.snmpSeverT
import java.io.F
import java.io.IOE
import java.util.ArrayL
import java.util.L
import java.util.P
import org.apache.log4j.BasicC
import org.snmp4j.MessageD
import org.snmp4j.MessageDispatcherI
import org.snmp4j.TransportM
import org.snmp4j.agent.AgentConfigM
import org.snmp4j.agent.DefaultMOContextS
import org.snmp4j.agent.DefaultMOS
import org.snmp4j.agent.DuplicateRegistrationE
import org.snmp4j.agent.MOQ
import org.snmp4j.agent.MOQueryWithS
import org.snmp4j.agent.MOS
import org.snmp4j.agent.MOS
import org.snmp4j.agent.ManagedO
import org.snmp4j.agent.cfg.EngineBootsCounterF
import org.snmp4j.agent.io.DefaultMOPersistenceP
import org.snmp4j.agent.io.MOI
import org.snmp4j.agent.io.MOInputF
import org.snmp4j.agent.io.prop.PropertyMOI
import org.snmp4j.agent.mo.util.VariableP
import org.snmp4j.agent.request.R
import org.snmp4j.agent.request.RequestS
import org.snmp4j.agent.request.SubR
import org.snmp4j.agent.request.SubRequestI
import org.snmp4j.log.Log4jLogF
import org.snmp4j.log.LogA
import org.snmp4j.log.LogF
import org.snmp4j.log.LogL
import org.snmp4j.mp.MPv3;
import org.snmp4j.security.SecurityP
import org.snmp4j.smi.A
import org.snmp4j.smi.GenericA
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetS
import org.snmp4j.smi.V
import org.snmp4j.smi.VariableB
import org.snmp4j.transport.TransportM
import org.snmp4j.util.ThreadP
import celul.snmpSeverTest.scalar.SysD
import celul.snmpSeverTest.scalar.SysInitD
import celul.snmpSeverTest.scalar.SysInitP
import celul.snmpSeverTest.scalar.SysTimeUp;
import celul.snmpSeverTest.table.MoTableU
public class SNMP4JAgent implements VariableProvider {
LogFactory.setLogFactory(new Log4jLogFactory());
BasicConfigurator.configure();
LogFactory.getLogFactory().getRootLogger().setLogLevel(LogLevel.ALL);
private LogAdapter logger = LogFactory.getLogger(SNMP4JAgent.class);
protected AgentConfigM
protected MOS
private String configF
private File bootCounterF
public SNMP4JAgent(){
configFile = "configFile.cfg";
bootCounterFile = new File("bootCounterFile.bc");
server = new DefaultMOServer();
MOServer[] moServers = new MOServer[] { server };
final Properties props = new Properties();
props.load(SNMP4JAgent.class.getResourceAsStream("SampleAgentConfig.properties"));
} catch (IOException ex) {
ex.printStackTrace();
MOInputFactory configurationFactory = new MOInputFactory(){
public MOInput createMOInput() {
return new PropertyMOInput(props, SNMP4JAgent.this);
MessageDispatcher messageDispatcher = new MessageDispatcherImpl();
List&String& list = new ArrayList&String&();
list.add("udp:0.0.0.0/161");
addListenAddresses(messageDispatcher,list);
agent = new AgentConfigManager(
new OctetString(MPv3.createLocalEngineID()),
messageDispatcher,
moServers,
ThreadPool.create("snmp4JAgent", 3),
configurationFactory,
new DefaultMOPersistenceProvider(moServers, configFile),
new EngineBootsCounterFile(bootCounterFile)
public Variable getVariable(String name) {
OctetString context =
int pos = name.indexOf(':');
if (pos &= 0) {
context = new OctetString(name.substring(0, pos));
oid = new OID(name.substring(pos + 1, name.length()));
oid = new OID(name);
final DefaultMOContextScope scope = new DefaultMOContextScope(context,
oid, true, oid, true);
MOQuery query = new MOQueryWithSource(scope, false, this);
ManagedObject mo = server.lookup(query);
if (mo != null) {
final VariableBinding vb = new VariableBinding(oid);
final RequestStatus status = new RequestStatus();
SubRequest req = new SubRequest() {
private MOQ
public boolean hasError() {
public void setErrorStatus(int errorStatus) {
status.setErrorStatus(errorStatus);
public int getErrorStatus() {
return status.getErrorStatus();
public RequestStatus getStatus() {
public MOScope getScope() {
public VariableBinding getVariableBinding() {
public Request getRequest() {
public Object getUndoValue() {
public void setUndoValue(Object undoInformation) {
public void completed() {
completed =
public boolean isComplete() {
public void setTargetMO(ManagedObject managedObject) {
public ManagedObject getTargetMO() {
public int getIndex() {
public void setQuery(MOQuery query) {
this.query =
public MOQuery getQuery() {
public SubRequestIterator repetitions() {
public void updateNextRepetition() {
public Object getUserObject() {
public void setUserObject(Object userObject) {
mo.get(req);
return vb.getVariable();
protected void addListenAddresses(MessageDispatcher md,
List&String& addresses) {
for (String addressString : addresses) {
Address address = GenericAddress.parse(addressString);
if (address == null) {
logger.fatal("Could not parse address string '" + addressString
@SuppressWarnings("rawtypes")
TransportMapping tm = TransportMappings.getInstance().createTransportMapping(address);
if (tm != null) {
md.addTransportMapping(tm);
logger.warn("No transport mapping available for address '"
+ address + "'.");
public void registerMIBs(){
server.register(new SysTimeUp(), null);
server.register(new SysDate(), null);
server.register(new SysInitDevice(), null);
server.register(new SysInitParams(), null);
server.register(MoTableUtil.getEmuTable(), null);
server.register(MoTableUtil.getEdfaTable(), null);
MoTableUtil.fillDefaultDataIntoEmuTable();
MoTableUtil.fillDefaultDataIntoEdfaTable();
} catch (DuplicateRegistrationException e) {
e.printStackTrace();
public void run() {
agent.initialize();
registerMIBs();
agent.setupProxyForwarder();
agent.setTableSizeLimits(new Properties());
agent.run();
public static void main(String[] args){
SNMP4JAgent sa = new SNMP4JAgent();
SecurityProtocols.getInstance().addDefaultProtocols();
运行snmp4jAgent.java,这样,我们的服务端就已经起来了。通过mibBrowser可以访问。
.1.3.6.1.4.1..1.1.1.1.1.0.1 a.0.1
.1.3.6.1.4.1..1.1.1.2.1.0.1 b.0.1
.1.3.6.1.4.1..1.1.1.3.1.0.1 c.0.1
.1.3.6.1.4.1..1.1.1.4.1.0.1 d.0.1
.1.3.6.1.4.1..1.1.1.5.1.0.1 e.0.1
.1.3.6.1.4.1..1.1.1.6.1.0.1 f.0.1
.1.3.6.1.4.1..1.1.1.7.1.0.1 g.0.1
.1.3.6.1.4.1..1.1.1.8.1.0.1 h.0.1
.1.3.6.1.4.1..1.1.1.9.1.0.1 i.0.1
.1.3.6.1.4.1..1.1.1.10.1.0.1 1
.1.3.6.1.4.1..1.2.1.1.1.0.1 edfa.a.0.1
.1.3.6.1.4.1..1.2.1.1.1.0.2 edfa.a.0.2
.1.3.6.1.4.1..1.2.1.1.1.0.3 edfa.a.0.3
.1.3.6.1.4.1..1.2.1.1.1.0.4 edfa.a.0.4
.1.3.6.1.4.1..1.2.1.2.1.0.1 edfa.b.0.1
.1.3.6.1.4.1..1.2.1.2.1.0.2 edfa.b.0.2
.1.3.6.1.4.1..1.2.1.2.1.0.3 edfa.b.0.3
.1.3.6.1.4.1..1.2.1.2.1.0.4 edfa.b.0.4
.1.3.6.1.4.1..1.2.1.3.1.0.1 edfa.c.0.1
.1.3.6.1.4.1..1.2.1.3.1.0.2 edfa.c.0.2
.1.3.6.1.4.1..1.2.1.3.1.0.3 edfa.c.0.3
.1.3.6.1.4.1..1.2.1.3.1.0.4 edfa.c.0.4
.1.3.6.1.4.1..1.2.1.4.1.0.1 edfa.d.0.1
.1.3.6.1.4.1..1.2.1.4.1.0.2 edfa.d.0.2
.1.3.6.1.4.1..1.2.1.4.1.0.3 edfa.d.0.3
.1.3.6.1.4.1..1.2.1.4.1.0.4 edfa.d.0.4
.1.3.6.1.4.1..1.2.1.5.1.0.1 edfa.e.0.1
.1.3.6.1.4.1..1.2.1.5.1.0.2 edfa.e.0.2
.1.3.6.1.4.1..1.2.1.5.1.0.3 edfa.e.0.3
.1.3.6.1.4.1..1.2.1.5.1.0.4 edfa.e.0.4
.1.3.6.1.4.1..1.2.1.6.1.0.1 edfa.f.0.1
.1.3.6.1.4.1..1.2.1.6.1.0.2 edfa.f.0.2
.1.3.6.1.4.1..1.2.1.6.1.0.3 edfa.f.0.3
.1.3.6.1.4.1..1.2.1.6.1.0.4 edfa.f.0.4
.1.3.6.1.4.1..1.2.1.7.1.0.1 edfa.g.0.1
.1.3.6.1.4.1..1.2.1.7.1.0.2 edfa.g.0.2
.1.3.6.1.4.1..1.2.1.7.1.0.3 edfa.g.0.3
.1.3.6.1.4.1..1.2.1.7.1.0.4 edfa.g.0.4
.1.3.6.1.4.1..1.2.1.8.1.0.1 edfa.h.0.1
.1.3.6.1.4.1..1.2.1.8.1.0.2 edfa.h.0.2
.1.3.6.1.4.1..1.2.1.8.1.0.3 edfa.h.0.3
.1.3.6.1.4.1..1.2.1.8.1.0.4 edfa.h.0.4
.1.3.6.1.4.1..1.3.0 3
也可以通过snmp4j客户端程序访问该服务器资源。后续再跟踪。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 jt808 协议模拟器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信