Win7安装和配置SNMP - java使用SNMP4j获取监控信息

一、配置和启动SNMP服务

通过SNMP监控Windows主机需要在被监控的服务器上安装简单网络管理协议(SNMP)的Windows组件,以Windows 7系统为例:

首先,在控制面板中找到“卸载程序”;
 

控制面板

在弹出的窗口中单击“打开或关闭Windows功能”;
 

添加功能

勾选弹出窗口中的“简单网络管理协议(SNMP)”项后单击“确定”并根据提示完成安装即可。
 

完成SNMP服务的安装并重启计算机后,右键单击“计算机”选择“管理”
 

在弹出的“计算机管理”窗口中左侧导航栏中找到“服务”,并在右侧找到“SNMP Service”项;
 

鼠标双击“SNMP Service”选项,在弹出的窗口中切换到“安全”选项卡中,如上图添加“接受的社区名称”和接收哪些主机发出的SNMP数据包,在本例中,为了方便测试,可以添加localhost。

“接受的社区名称”是自己定义的任意字符都可以,接收那些主机发出的SNMP数据包定义成你的Nagios服务器即可。
到这里被监控端的Windows主机的SNMP服务就配置完成了。
 
二、使用简单的SNMP4j来进行SNMP数据的抓取
  package   com . ebay . tools ;


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.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

public class SNMPTestExample {

   public static void main(String[] argsthrows Exception {
       System.out.println(" --------------- SNMPExample start ---------------");
       
       TransportMapping<UdpAddress> transportMapping = new DefaultUdpTransportMapping();
       Snmp snmp = new Snmp(transportMapping);
       transportMapping.listen();
       
       ResponseEvent response = null;
       
       PDU pdu = new PDU();
        pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.2.0")));
        pdu.setType(PDU.GET);
        
        String address = "localhost" + "/" + 161;
        
        Address targetAddress = new UdpAddress(address);
       CommunityTarget target = new CommunityTarget();
       
       target.setCommunity(new OctetString("public")); // 改字符串是我们在上面配置的
       target.setAddress(targetAddress);
       target.setRetries(2);
       target.setTimeout(3000);
       target.setVersion(SnmpConstants.version2c);
       
        response = snmp.get(pdu, target);
       
        System.out.println("result: " + response.getResponse());
    
        System.out.println(" --------------- SNMPExample ended ---------------");
   }
}

 
如果你的SNMP的版本是version3,必须加入安全机制相关的代码:
 
import   org.snmp4j.PDU ;
import   org.snmp4j.ScopedPDU ;
import   org.snmp4j.Snmp ;
import   org.snmp4j.Target ;
import   org.snmp4j.TransportMapping ;
import   org.snmp4j.UserTarget ;
import   org.snmp4j.event.ResponseEvent ;
import   org.snmp4j.mp.MPv3 ;
import   org.snmp4j.mp.SnmpConstants ;
import   org.snmp4j.security.AuthMD5 ;
import   org.snmp4j.security.PrivDES ;
import   org.snmp4j.security.SecurityLevel ;
import   org.snmp4j.security.SecurityModels ;
import   org.snmp4j.security.SecurityProtocols ;
import   org.snmp4j.security.USM ;
import   org.snmp4j.security.UsmUser ;
import   org.snmp4j.smi.Address ;
import   org.snmp4j.smi.OID ;
import   org.snmp4j.smi.OctetString ;
import   org.snmp4j.smi.UdpAddress ;
import   org.snmp4j.smi.VariableBinding ;
import   org.snmp4j.transport.DefaultUdpTransportMapping ;

public   class   SNMPExampleVersion3   {

    public   static   void   main ( String []   args throws   Exception   {
        TransportMapping < UdpAddress >   transportMapping   =   new   DefaultUdpTransportMapping ();
        Snmp   snmp   =   new   Snmp ( transportMapping );
       
        USM   usm   =   new   USM ( SecurityProtocols . getInstance (),   new   OctetString ( MPv3 . createLocalEngineID ()),   0 );
        SecurityModels . getInstance (). addSecurityModel ( usm );
       
        transportMapping . listen ();
       
       
        ResponseEvent   response   =   null ;
       
        ScopedPDU   pdu   =   new   ScopedPDU ();
         pdu . add ( new   VariableBinding ( new   OID ( "1.3.6.1.2.1.1.2.0" )));
         pdu . setType ( PDU . GETNEXT );
        
         String []   communities   =   { "private" ,   "cur" ,   "console" ,   "public" ,   "dashboard" };
        
         // String address = "10.14.228.24"; // phxlb129a.phx.ebay.com        big ip
         // String address = "10.10.66.82"; // sr-filer07b.smf.ebay.com    filer
         String   address   =   "localhost" ;   // lvslb05a.lvs.ebay.com   netscaler
         address   =   address   +   "/"   +   161 ;
        
         for  ( String   communityString   :   communities {
             Address   targetAddress   =   new   UdpAddress ( address );
            Target   target   =   new   UserTarget ();
           
           
               //添加用户
            snmp . getUSM (). addUser (
                new   OctetString ( "MD5DES" ),
                new   UsmUser ( new   OctetString ( "MD5DES" ),   AuthMD5 . ID ,
                  new   OctetString ( "MD5DESUserAuthPassword" ),   PrivDES . ID ,
                  new   OctetString ( "MD5DESUserPrivPassword" )));
             
              //设置安全级别
            target . setSecurityLevel ( SecurityLevel . AUTH_PRIV );
            target . setSecurityName ( new   OctetString ( "MD5DES" ));
            target . setVersion ( SnmpConstants . version3 );
            pdu . setContextName ( new   OctetString ( communityString ));
            target . setAddress ( targetAddress );
            target . setRetries ( 2 );
            target . setTimeout ( 3000 );
            target . setVersion ( SnmpConstants . version3 );
           
         // response = snmp.send(pdu, getTarget(), null);
             response   =   snmp . get ( pdu ,   target );
           
             System . out . println ( "result: "   +   response . getResponse ());
         }
    
       
    }
}

猜你喜欢

转载自josh-persistence.iteye.com/blog/2215307