一、配置和启动SNMP服务
通过SNMP监控Windows主机需要在被监控的服务器上安装简单网络管理协议(SNMP)的Windows组件,以Windows 7系统为例:
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[] args) throws 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 ---------------");
}
}
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 ());
}
}
}