今天这个示例很简单,主要是为了让大家很快的建立一套能够走通的测试环境!
大家知道,要接触一个新的东西总要写一些HelloWorld的东西,或者把内容走同,不然自己会非常的纠结!
为了简单起见,现在在Windows上建立一个SNMP服务环境,XP系统也自带了该服务的支持!
控制面板中打开添加或删除程序!
然后点击对钩安装如上选项,安装两个服务:
安装后会在服中看到SNMP服务内容
然后我们需要安装一个软件,这个软件可以查看机器的MIB树:
HiliSoft MIB Browser是一款强大、易用的网络管理和分析工具。它可以加载SNMP的MIB文件并快速进行解析,建构两个树形视图:MIB结点视图和MIB文件(模块)视图。 使用这两个视图,用户可以非常容易地通过SNMPv1/v2c/v3协议来浏览和修改SNMP代理上变量的值。内建有trap receiver,可以收集SNMP代理发送的trap。
安装后他会自动加载自己预先定义的MIB内容,直接运行该程序,然后打开是机器名称的节点
GET一下,你就能获得该机器的名称,但是要注意的是,该节点的OID是 1.3.6.1.2.1.1.5 ,但是你程序里面访问时应该是 1.3.6.1.2.1.1.5.0 ,因为该软件GET时把该OID下的所有OID实例都会显示出来
Value就是我的机器名称,也可以通过该MIB树查看其他内容
然后我们通过SNMP4J来访问该OID,来获得计算机名称:
package com; 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; /** * @说明 SNMP4J测试 * @author 崔素强 * @version 1.0 * @since */ public class Snmp4jGet { private Snmp snmp = null; private Address targetAddress = null; public static void main(String[] args) { try { Snmp4jGet util = new Snmp4jGet(); util.initComm(); util.getPDU(); } catch (IOException e) { e.printStackTrace(); } } /** * 初始化 */ public void initComm() throws IOException { // 地址是本机 端口一般都是161 targetAddress = GenericAddress.parse("udp:127.0.0.1/161"); TransportMapping transport = new DefaultUdpTransportMapping(); snmp = new Snmp(transport); transport.listen(); } /** * 执行发送 */ public void getPDU() throws IOException { // PDU 对象 PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.5.0"))); // 操作类型 pdu.setType(PDU.GET); ResponseEvent revent = sendPDU(pdu); if(null != revent){ readResponse(revent); } } /** * 发送一个PDU */ public ResponseEvent sendPDU(PDU pdu) throws IOException { // 设置 目标 CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public")); target.setAddress(targetAddress); // 通信不成功时的重试次数 N+1次 target.setRetries(2); // 超时时间 target.setTimeout(2 * 1000); // SNMP 版本 target.setVersion(SnmpConstants.version2c); // 向Agent发送PDU,并返回Response return snmp.send(pdu, target); } /** * 解析返回的值 */ @SuppressWarnings("unchecked") public void readResponse(ResponseEvent respEvnt) { // 解析Response System.out.println("------------>解析Response<-------------"); if (respEvnt != null && respEvnt.getResponse() != null) { Vector<VariableBinding> recVBs = respEvnt.getResponse() .getVariableBindings(); for (int i = 0; i < recVBs.size(); i++) { VariableBinding recVB = recVBs.elementAt(i); System.out.println(recVB.getOid() + " : " + recVB.getVariable().toString()); } } } }
打印结果如下:
------------>解析Response<------------- 1.3.6.1.2.1.1.5.0 : 796AF67B7B0140E
我们通过实例OID获得到了计算机SNMP服务提供的信息!
当然这这是个开始,实际中服务端的OID定义是公司事先定义好的,服务也是由其他开发人员提供,而你只需要通过预先配置的OID来访问服务获得内容并展示即可
用到的软件上传上去,大家可以玩玩!
请您到ITEYE看我的原创:http://cuisuqiang.iteye.com
或支持我的个人博客,地址:http://www.javacui.com
相关推荐
埃克斯在原版《黑衣人》漫画中,一位名叫 Ecks 的特工出轨了,想要消灭 MiB。 这个小的 Python 库有一个类似的目标...... Ecks 提供了一种使用 SNMP 从远程机器获取数据的简单方法,而无需处理单个 MIB 或 OID。 ...
<4>/domain在当前域的主域控制器中执行该操作,否则在本地计算机上执行操作? <5>username[ ...]列表显示要添加到组或从组中删除的一个或多个用户。 <6>/add添加组或在组中添加用户名。 <7>/delete删除组或从...
快速智能的扫描引擎,可以快速扫描网络上计算机的计算机名、IP地址、MAC地址、SNMP、工作组名、用户名称、操作系统类型、服务器类型、备注、共享文件夹,隐藏共享、共享打印机、共享文件夹属性(是否可写、只读或者...
A:检测每个主机都会单独起一个Checkhost.exe进程,检测完毕会自动退出。并发主机数量可以通过 图形界面的设置窗口设定,命令行程序通过“-t”参数设定。 Q:扫描过程中机器突然蓝屏重启是什么原因? A:扫描...
局域网助手 LanHelper专门为高...“服务”功能专门用于Windows系统的服务管理,可以查看服务,启动停止服务,或者远程安装服务等等。LanHelper中的各种操作都提供有实时的日志,能够帮助网络管理员分析和解决网络问题。
局域网助手 LanHelper专门为高...“服务”功能专门用于Windows系统的服务管理,可以查看服务,启动停止服务,或者远程安装服务等等。LanHelper中的各种操作都提供有实时的日志,能够帮助网络管理员分析和解决网络问题。
“顺序执行针对服务的破坏性脚本” - 如果一个脚本正在尝试D.O.S某个服务,另一个脚本同时在获取该服务信息,或同时有其他脚本尝试溢出该服务,将导致扫描结果不正确。但如果脚本间不需要互相等待,将会节省...
“顺序执行针对服务的破坏性脚本” - 如果一个脚本正在尝试D.O.S某个服务,另一个脚本同时在获取该服务信息,或同时有其他脚本尝试溢出该服务,将导致扫描结果不正确。但如果脚本间不需要互相等待,将会节省扫描...
at ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机 finger username @host 查看最近有哪些用户登陆 telnet ip 端口 远和登陆服务器,默认端口为23 open ip 连接到IP(属telnet登陆后的...
A:操作系统识别方面确实不能保证100%的准确率,目前是综合NMAP、P0F的指纹库、NETBIOS信息和SNMP信息进行识别,如果目标机器没有开放NETBIOS和SNMP协议,TCP/IP堆栈指纹也不在数据库中,就需要使用者根据其他信息...
A:操作系统识别方面确实不能保证100%的准确率,目前是综合NMAP、P0F的指纹库、NETBIOS信息和SNMP信息进行识别,如果目标机器没有开放NETBIOS和SNMP协议,TCP/IP堆栈指纹也不在数据库中,就需要使用者根据其他信息...