longgangbai 发表于 2013-1-15 08:10:07

SNMP在Window系统中的简单测试应用

     在window系统中简单的配置之后,使用SNMP4J的测试的信息如下:
  以下部分的SNMP中MIB中OID可能错误,希望大家不惜指出,谢谢!
package com.easyway.snmp;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;/** ** snmp简单应用 * @author longgangbai * */public class SnmpUtils {                  private Snmp snmp = null;                  private Address targetAddress = null;               /**       * 初始化SNMP的各种信息       * @throws IOException       */       public void initComm() throws IOException {               //创建设备代理的地址信息            targetAddress = GenericAddress.parse("udp:192.168.0.175/161");               //创建默认的Udp传输影响对象            TransportMapping transport = new DefaultUdpTransportMapping();               //创建snmp对象            snmp = new Snmp(transport);               //开始snmp监听性            transport.listen();            }                /**      * 响应snmp的信息的方法      * @param pdu      * @return      * @throws IOException      */       public ResponseEvent sendPDU(PDU pdu) throws IOException {                   //创建团体对象(一般在客户端设置的)            CommunityTarget target = new CommunityTarget();               target.setCommunity(new OctetString("public"));                //设置snmp监听地址的团体            target.setAddress(targetAddress);                   //设置请求的次数            target.setRetries(2);                   //设置请求的超时时间的            target.setTimeout(1500);               //设置snmp的版本信息            target.setVersion(SnmpConstants.version1);                   //设置设备Agent的代理的响应的对象团体            return snmp.send(pdu, target);          }                     /**       * 设置要监控的PDU对象       * @throws IOException       */       public void setPDU() throws IOException {                   //设置设备Agent代理的电脑名字的PDU                     PDU pdu = new PDU();               pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 5, 0 }), new OctetString("SNMP-PCNAME")));               pdu.setType(PDU.SET);               sendPDU(pdu);                            //设置设备Agent代理电脑的工作组的PDU                           PDU pdu0 = new PDU();               pdu0.add(new VariableBinding(new OID(new int[] {1, 3, 6, 1, 4, 1, 77, 1, 4,1,0 }), new OctetString("SNMP-WORKGROUP")));               pdu0.setType(PDU.SET);               sendPDU(pdu0);                                           //设置设备Agent代理电脑的系统信息            PDU pdu1 = new PDU();               pdu1.add(new VariableBinding(new OID(new int[] {1, 3, 6, 1, 2, 1, 1, 1, 0 }), new OctetString("SNMP-SYSTEM-INFO")));               pdu1.setType(PDU.SET);               sendPDU(pdu1);                           //设置设备Agent代理电脑的启动时间            PDU pdu2 = new PDU();               pdu2.add(new VariableBinding(new OID(new int[] {1, 3, 6, 1, 2, 1, 1, 3 }), new OctetString("SNMP-SYSTEM-STARTUP")));               pdu2.setType(PDU.SET);               sendPDU(pdu2);                                             //设置设备代理电脑的联系人            PDU pdu3 = new PDU();               pdu3.add(new VariableBinding(new OID(new int[] {1, 3, 6, 1, 2, 1, 1, 4,0 }), new OctetString("SNMP-SYSTEM-LINKMAN")));               pdu3.setType(PDU.SET);               sendPDU(pdu3);                              //设置设备代理电脑序列号            //Getting Server Serial Number:               //snmputil get 127.0.0.1 public .1.3.6.1.4.1.23.2.28.1.2.0               PDU pdu4 = new PDU();               pdu4.add(new VariableBinding(new OID(new int[] {1,3,6,1,4,1,23,2,28,1,2,0}), new OctetString("SNMP-SYSTEM-SERIAL-NUMBER")));               pdu4.setType(PDU.SET);               sendPDU(pdu4);                               //设置设备代理DOS内存使用率            PDU dosmermory = new PDU();               dosmermory.add(new VariableBinding(new OID(new int[] { 1,3,6,1,2,1,25,2,3,1,6,1 }), new OctetString("SNMP-SYSTEM-DOS-MERMORY")));               dosmermory.setType(PDU.SET);               sendPDU(dosmermory);                                          //设置设备代理电脑ALLOC-MEMORY-POOL            PDU memroypoll = new PDU();               memroypoll.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,2,3,1,6,2}), new OctetString("SNMP-SYSTEM-ALLOC-MEMORY-POOL")));               memroypoll.setType(PDU.SET);               sendPDU(memroypoll);                                          //设置设备代理缓存Buffer            PDU cachebuffer = new PDU();               cachebuffer.add(new VariableBinding(new OID(new int[] { 1,3,6,1,2,1,25,2,3,1,6,3}), new OctetString("SNMP-SYSTEM-CACHE-BUFFER")));               cachebuffer.setType(PDU.SET);               sendPDU(cachebuffer);                                          //设置设备代理电脑Cache Moveable Memory               PDU cachemoveablemoemory = new PDU();               cachemoveablemoemory.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,2,3,1,6,4 }), new OctetString("SNMP-SYSTEM-SERIAL-NUMBER")));               cachemoveablemoemory.setType(PDU.SET);               sendPDU(cachemoveablemoemory);                                          //设置设备代理电脑Cache No Moveable Memory               PDU cachenomoveablemoemory = new PDU();               cachenomoveablemoemory.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,2,3,1,6,5 }), new OctetString("SNMP-SYSTEM-SERIAL-NUMBER")));               cachenomoveablemoemory.setType(PDU.SET);               sendPDU(cachenomoveablemoemory);                                          //设置设备代理电脑Code and Data Memory:               PDU memory = new PDU();               memory.add(new VariableBinding(new OID(new int[] { 1,3,6,1,2,1,25,2,3,1,6,6 }), new OctetString("SNMP-SYSTEM-CODE-DATA-MEMORY")));               memory.setType(PDU.SET);               sendPDU(memory);                                          //设置设备代理内存使用            PDU usedmemory = new PDU();               usedmemory.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,5,1,1,2,1 }), new OctetString("SNMP-SYSTEM-USSED-MEMORY")));               usedmemory.setType(PDU.SET);               sendPDU(usedmemory);                                          //设置设备代理电脑CPU使用            PDU cpu = new PDU();               cpu.add(new VariableBinding(new OID(new int[] { 1,3,6,1,2,1,25,5,1,1,1,1}), new OctetString("SNMP-SYSTEM-USED-CPU")));               cpu.setType(PDU.SET);               sendPDU(cpu);                              //设置设备代理电脑系统服务            PDU sysSrv = new PDU();               sysSrv.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,1,7 }), new OctetString("SNMP-SYSTEM-SERVICES")));               sysSrv.setType(PDU.SET);               sendPDU(sysSrv);                              //设置设备代理电脑RAM空闲空间            PDU ramFree = new PDU();               ramFree.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,2,2,0}), new OctetString("SNMP-SYSTEM-RAM-FREE")));               ramFree.setType(PDU.SET);               sendPDU(ramFree);                //设置代理虚拟内存            PDU vmmemory = new PDU();               vmmemory.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,2,1,3}), new OctetString("SNMP-VM-MEMORY")));               vmmemory.setType(PDU.SET);               sendPDU(vmmemory);               //设置代理电脑的系统进程数量            PDU processNum = new PDU();               processNum.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,1,60}), new OctetString("SNMP-SYTEM-PROCESSNUM")));               processNum.setType(PDU.SET);               sendPDU(processNum);               PDU systemDate = new PDU();               systemDate.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,1,2   }), new OctetString("SNMP-SYSTEM-DATE")));               systemDate.setType(PDU.SET);               sendPDU(systemDate);                                    }                      /**      * 获取要监控的PDU      * @throws IOException      */       public void getPDU() throws IOException {                   // get PDU               PDU pdu = new PDU();               pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 5, 0 })));               pdu.setType(PDU.GET);               readResponse(sendPDU(pdu));                                             // get PDU               PDU pdu0 = new PDU();               pdu0.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 4, 1, 77, 1, 4,1,0 })));               pdu0.setType(PDU.GET);               readResponse(sendPDU(pdu0));                                           PDU pdu1 = new PDU();               pdu1.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 1, 0 })));               pdu1.setType(PDU.GET);               readResponse(sendPDU(pdu1));                           PDU pdu2 = new PDU();               pdu2.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 3})));               pdu2.setType(PDU.GETNEXT);               readResponse(sendPDU(pdu2));                                                         PDU pdu3 = new PDU();               pdu3.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 4,0 })));         pdu3.setType(PDU.GET);               readResponse(sendPDU(pdu3));                                           PDU pdu4 = new PDU();               pdu4.add(new VariableBinding(new OID(new int[] {1,3,6,1,4,1,23,2,28,1,2,0 })));               pdu4.setType(PDU.GETNEXT);               readResponse(sendPDU(pdu4));                            //设置设备代理DOS内存使用            PDU dosmermory = new PDU();               dosmermory.add(new VariableBinding(new OID(new int[] { 1,3,6,1,2,1,25,2,3,1,6,1})));               dosmermory.setType(PDU.GETNEXT);               readResponse(sendPDU(dosmermory));                                           //设置设备代理电脑ALLOC-MEMORY-POOL            PDU memroypoll = new PDU();               memroypoll.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,2,3,1,6,2})));               memroypoll.setType(PDU.GETNEXT);                readResponse(sendPDU(memroypoll));                                          //设置设备代理缓存Buffer            PDU cachebuffer = new PDU();               cachebuffer.add(new VariableBinding(new OID(new int[] { 1,3,6,1,2,1,25,2,3,1,6,3})));               cachebuffer.setType(PDU.GET);            readResponse(sendPDU(cachebuffer));                                          //设置设备代理电脑Cache Moveable Memory               PDU cachemoveablemoemory = new PDU();               cachemoveablemoemory.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,2,3,1,6,4 })));               cachemoveablemoemory.setType(PDU.GET);            readResponse(sendPDU(cachemoveablemoemory));                                                      //设置设备代理电脑Cache No Moveable Memory               PDU cachenomoveablemoemory = new PDU();               cachenomoveablemoemory.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,2,3,1,6,5 })));               cachenomoveablemoemory.setType(PDU.GET);               readResponse(sendPDU(cachenomoveablemoemory));                                                      //设置设备代理电脑Code and Data Memory:               PDU memory = new PDU();               memory.add(new VariableBinding(new OID(new int[] { 1,3,6,1,2,1,25,2,3,1,6,6 })));               memory.setType(PDU.GET);               readResponse(sendPDU(memory));                                          //设置设备代理内存使用            PDU usedmemory = new PDU();               usedmemory.add(new VariableBinding(new OID(new int[] {   1,3,6,1,2,1,25,5,1,1,2,1   })));               usedmemory.setType(PDU.GETNEXT);               readResponse(sendPDU(usedmemory));                                          //设置设备代理电脑CPU使用            PDU cpu = new PDU();               cpu.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,5,1,1,1,1})));               cpu.setType(PDU.GETNEXT);               readResponse(sendPDU(cpu));                            //设置设备代理电脑系统服务            PDU sysSrv = new PDU();               sysSrv.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,1,7})));               sysSrv.setType(PDU.GET);               readResponse(sendPDU(sysSrv));                            //设置设备代理电脑RAM空闲空间            PDU ramFree = new PDU();               ramFree.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,2,2,0})));               ramFree.setType(PDU.GETNEXT);               readResponse(sendPDU(ramFree));               //设置代理电脑的虚拟内存            PDU vmmemory = new PDU();               vmmemory.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,2,1,3})));               vmmemory.setType(PDU.GETNEXT);               readResponse(sendPDU(vmmemory));            //设置代理电脑的进程数量            PDU processNum = new PDU();               processNum.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,1,60 })));               processNum.setType(PDU.GETNEXT);               readResponse(sendPDU(processNum));                            PDU systemDate = new PDU();               systemDate.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,25,1,2})));               systemDate.setType(PDU.GETNEXT);               readResponse(sendPDU(systemDate));                                                 }                            /**       * 获取设备响应信息       * @param respEvnt       */       public void readResponse(ResponseEvent respEvnt) {                     if (respEvnt != null && respEvnt.getResponse() != null) {                        @SuppressWarnings("unchecked")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());                        }                   }            }                        public static void main(String[] args) {                   try {                      SnmpUtils util = new SnmpUtils();                        //                     util.initComm();                        util.setPDU();                        util.getPDU();                   } catch (IOException e) {                        e.printStackTrace();                   }            }   }    测试显示结果如下:
 http://dl.iteye.com/upload/picture/pic/82139/e7457339-0414-313b-8863-52e4b525a123.jpg
页: [1]
查看完整版本: SNMP在Window系统中的简单测试应用