`
cuisuqiang
  • 浏览: 3935663 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3650303
社区版块
存档分类
最新评论

SNMP 在Windows上建一个SNMP服务并获得该机器的机器名

阅读更多

今天这个示例很简单,主要是为了让大家很快的建立一套能够走通的测试环境!

大家知道,要接触一个新的东西总要写一些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

 

17
20
分享到:
评论

相关推荐

    ecks:一种无需处理 MIB 即可从 SNMP 中获取数据的简单方法

    埃克斯在原版《黑衣人》漫画中,一位名叫 Ecks 的特工出轨了,想要消灭 MiB。 这个小的 Python 库有一个类似的目标...... Ecks 提供了一种使用 SNMP 从远程机器获取数据的简单方法,而无需处理单个 MIB 或 OID。 ...

    NET命令指令集-如何在windows下使用net命令行

    &lt;4&gt;/domain在当前域的主域控制器中执行该操作,否则在本地计算机上执行操作? &lt;5&gt;username[ ...]列表显示要添加到组或从组中删除的一个或多个用户。 &lt;6&gt;/add添加组或在组中添加用户名。 &lt;7&gt;/delete删除组或从...

    局域网扫描器 不错的工具

    快速智能的扫描引擎,可以快速扫描网络上计算机的计算机名、IP地址、MAC地址、SNMP、工作组名、用户名称、操作系统类型、服务器类型、备注、共享文件夹,隐藏共享、共享打印机、共享文件夹属性(是否可写、只读或者...

    强大的扫描工具x-scan

    A:检测每个主机都会单独起一个Checkhost.exe进程,检测完毕会自动退出。并发主机数量可以通过 图形界面的设置窗口设定,命令行程序通过“-t”参数设定。 Q:扫描过程中机器突然蓝屏重启是什么原因? A:扫描...

    LanHelper局域网助手V1.99 简体中文版.zip

    局域网助手 LanHelper专门为高...“服务”功能专门用于Windows系统的服务管理,可以查看服务,启动停止服务,或者远程安装服务等等。LanHelper中的各种操作都提供有实时的日志,能够帮助网络管理员分析和解决网络问题。

    局域网助手(LanHelper) 1.83 简体中文版

    局域网助手 LanHelper专门为高...“服务”功能专门用于Windows系统的服务管理,可以查看服务,启动停止服务,或者远程安装服务等等。LanHelper中的各种操作都提供有实时的日志,能够帮助网络管理员分析和解决网络问题。

    X-Scan

    “顺序执行针对服务的破坏性脚本” - 如果一个脚本正在尝试D.O.S某个服务,另一个脚本同时在获取该服务信息,或同时有其他脚本尝试溢出该服务,将导致扫描结果不正确。但如果脚本间不需要互相等待,将会节省...

    X-Scan v3.1

    “顺序执行针对服务的破坏性脚本” - 如果一个脚本正在尝试D.O.S某个服务,另一个脚本同时在获取该服务信息,或同时有其他脚本尝试溢出该服务,将导致扫描结果不正确。但如果脚本间不需要互相等待,将会节省扫描...

    cmd操作命令和linux命令大全收集

    at ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机 finger username @host 查看最近有哪些用户登陆 telnet ip 端口 远和登陆服务器,默认端口为23 open ip 连接到IP(属telnet登陆后的...

    x-SCAN -V3.3-CN.

    A:操作系统识别方面确实不能保证100%的准确率,目前是综合NMAP、P0F的指纹库、NETBIOS信息和SNMP信息进行识别,如果目标机器没有开放NETBIOS和SNMP协议,TCP/IP堆栈指纹也不在数据库中,就需要使用者根据其他信息...

    x-scan v3.3 GUI

    A:操作系统识别方面确实不能保证100%的准确率,目前是综合NMAP、P0F的指纹库、NETBIOS信息和SNMP信息进行识别,如果目标机器没有开放NETBIOS和SNMP协议,TCP/IP堆栈指纹也不在数据库中,就需要使用者根据其他信息...

Global site tag (gtag.js) - Google Analytics