Java小强个人技术博客站点    手机版
当前位置: 首页 >> 开源 >> SNMP 在Windows上建一个SNMP服务并获得该机器的机器名

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

93770 开源 | 2014-11-10

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

大家知道,要接触一个新的东西总要写一些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来访问服务获得内容并展示即可 

 点击下载

推荐您阅读更多有关于“ Windows snmp HelloWorld XP ”的文章

上一篇:UDP 上传文件 下一篇:SNMP 修改SNMP4J消息内容 之TCP发送模式

猜你喜欢

发表评论: