作者: ecsun  链接:http://papa.javaeye.com/blog/220534  发表时间: 2008年07月28日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

Java代码
#mib.properties  
#Fri Jul 11 15:57:28 CST 2008 
1.3.6.1.2.1.1.6.0=beijing  
1.3.6.1.2.1.1.8.0=test  
1.3.6.1.2.1.1.5.0=admin  
1.3.6.1.2.1.1.7.0=8899 

#mib.properties
#Fri Jul 11 15:57:28 CST 2008
1.3.6.1.2.1.1.6.0=beijing
1.3.6.1.2.1.1.8.0=test
1.3.6.1.2.1.1.5.0=admin
1.3.6.1.2.1.1.7.0=8899 mib搞的两天不是很明白,于是自己定义了个配置文件来充当mib库,mib.properties



下面的例子是服务器端,也就是manager:



Java代码
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;  
 
public class SnmpUtil {  
    private Snmp snmp = null;  
    private Address targetAddress = null;  
 
    public void initComm() throws IOException {  
        // 设置Agent方的IP和端口  
        targetAddress = GenericAddress.parse("udp:192.168.10.191/161");  
        TransportMapping transport = new DefaultUdpTransportMapping();  
        snmp = new Snmp(transport);  
        transport.listen();  
    }  
 
    public ResponseEvent sendPDU(PDU pdu) throws IOException {  
        // 设置 target  
        CommunityTarget target = new CommunityTarget();  
        target.setCommunity(new OctetString("public"));  
        target.setAddress(targetAddress);  
        // 通信不成功时的重试次数  
        target.setRetries(2);  
        // 超时时间  
        target.setTimeout(1500);  
        target.setVersion(SnmpConstants.version1);  
        // 向Agent发送PDU,并返回Response  
        return snmp.send(pdu, target);  
    }  
 
    public void setPDU() throws IOException {  
        // set PDU  
        PDU pdu = new PDU();  
        pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 7,  
                0 }), new OctetString("8899")));  
        pdu.setType(PDU.SET);  
        sendPDU(pdu);  
    }  
    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, 6,  
                0 })));// pcName  
        pdu.setType(PDU.GET);  
        readResponse(sendPDU(pdu));  
    }  
 
    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());  
            }  
        }  
 
    }  
 
    public static void main(String[] args) {  
        System.out.println("----------start-------------");  
        try {  
            SnmpUtil util = new SnmpUtil();  
            util.initComm();  
             util.setPDU();  
            util.getPDU();  
        } catch (IOException e) {  
 
            e.printStackTrace();  
 
        }  
 
    }  
 


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;

public class SnmpUtil {
private Snmp snmp = null;
private Address targetAddress = null;

public void initComm() throws IOException {
// 设置Agent方的IP和端口
targetAddress = GenericAddress.parse("udp:192.168.10.191/161");
TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
transport.listen();
}

public ResponseEvent sendPDU(PDU pdu) throws IOException {
// 设置 target
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
// 通信不成功时的重试次数
target.setRetries(2);
// 超时时间
target.setTimeout(1500);
target.setVersion(SnmpConstants.version1);
// 向Agent发送PDU,并返回Response
return snmp.send(pdu, target);
}

public void setPDU() throws IOException {
// set PDU
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 7,
0 }), new OctetString("8899")));
pdu.setType(PDU.SET);
sendPDU(pdu);
}
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, 6,
0 })));// pcName
pdu.setType(PDU.GET);
readResponse(sendPDU(pdu));
}

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());
}
}

}

public static void main(String[] args) {
System.out.println("----------start-------------");
try {
SnmpUtil util = new SnmpUtil();
util.initComm();
util.setPDU();
util.getPDU();
} catch (IOException e) {

e.printStackTrace();

}

}

}

agent代理端代码:



Java代码
import java.util.*;  
/** 
* agent代理端 
* leo 
* 20080710 
*/ 
import org.snmp4j.*;  
import org.snmp4j.smi.*;  
 
import snmputil.Config;  
 
public class OTAAgent {  
 
    public static class Handler implements org.snmp4j.CommandResponder {  
        protected java.lang.String mAddress = null;  
        protected int mPort = 0;  
        protected java.lang.String mMyCommunityName = null;  
        protected org.snmp4j.TransportMapping mServerSocket = null;  
        protected org.snmp4j.Snmp mSNMP = null;  
 
        public Handler() {  
        }  
 
        public void configure() {  
            mAddress = "192.168.10.191";  
            mPort = 161;  
            mMyCommunityName = "OAagent";  
        }  
 
        public void start() {  
            try {  
                mServerSocket = new org.snmp4j.transport.DefaultUdpTransportMapping(  
                        new org.snmp4j.smi.UdpAddress(java.net.InetAddress  
                                .getByName(mAddress), mPort));  
                mSNMP = new org.snmp4j.Snmp(mServerSocket);  
                mSNMP.addCommandResponder(this);  
                mServerSocket.listen();  
            } catch (java.net.UnknownHostException vException) {  
                System.out.println(vException);  
            } catch (java.io.IOException vException) {  
                System.out.println(vException);  
            }  
        }  
 
        public synchronized void processPdu(  
                org.snmp4j.CommandResponderEvent aEvent) {  
            java.lang.String vCommunityName = new java.lang.String(aEvent  
                    .getSecurityName());  
            System.out.println("Community name " + vCommunityName);  
            org.snmp4j.PDU vPDU = aEvent.getPDU();  
            Config config=new Config();  
            if (vPDU == null) {  
                System.out.println("Null pdu");  
            } else {  
                System.out.println("(rcv) " + vPDU.toString());  
                switch (vPDU.getType()) {  
                case org.snmp4j.PDU.GET:  
                case org.snmp4j.PDU.GETNEXT:  
                    break;  
                case org.snmp4j.PDU.SET:  
                    System.out.println("------SET----------");  
                    String reciv=vPDU.get(0).getVariable().getSyntaxString();  
                    System.out.println("----set------"+vPDU.get(0).toString());  
                    String setoid=vPDU.get(0).toString();  
                    System.out.println("-----set-----"+setoid.substring(0, setoid.indexOf("=")-1));  
                    System.out.println("-----set-----"+setoid.substring(setoid.indexOf("=")+1));  
                    config.setValueByOID(setoid.substring(0, setoid.indexOf("=")-1).trim(), setoid.substring(setoid.indexOf("=")+1).trim());  
                }  
                org.snmp4j.mp.StatusInformation statusInformation = new org.snmp4j.mp.StatusInformation();  
                org.snmp4j.mp.StateReference ref = aEvent.getStateReference();  
                try {  
                    System.out.println("Sending response");  
                    vPDU.setType(PDU.RESPONSE);  
                      
                    OID oid=vPDU.get(0).getOid();  
                    String setoid=vPDU.get(0).toString();  
                    System.out.println("----get------"+setoid.substring(0, setoid.indexOf("=")-1));  
                    System.out.println("-----get-----"+setoid.substring(setoid.indexOf("=")+1));  
                    vPDU.set(0, new VariableBinding(oid,  
                            new OctetString(config.getValueByOID(setoid.substring(0, setoid.indexOf("=")-1).trim()))));  
 
                    aEvent.getMessageDispatcher().returnResponsePdu(  
                            aEvent.getMessageProcessingModel(),  
 
                            aEvent.getSecurityModel(),  
                            aEvent.getSecurityName(),  
 
                            aEvent.getSecurityLevel(), vPDU,  
                            aEvent.getMaxSizeResponsePDU(), ref,  
 
                            statusInformation);  
                } catch (org.snmp4j.MessageException vException) {  
                    System.out.println(vException);  
                }  
            }  
        }  
    }  
 
    public static void main(String argv[]) {  
        Handler h = new Handler();  
        /** 初始化参数 * */ 
        h.configure();  
        h.start();  
        /** Do nothing loop * */ 
        while (true) {  
            System.out.println("----------loop-------------");  
            synchronized (OTAAgent.class) {  
                try {  
                    OTAAgent.class.wait();  
                } catch (Exception e) {  
                }  
            }  
        }  
    }  


import java.util.*;
/**
* agent代理端
* leo
* 20080710
*/
import org.snmp4j.*;
import org.snmp4j.smi.*;

import snmputil.Config;

public class OTAAgent {

public static class Handler implements org.snmp4j.CommandResponder {
protected java.lang.String mAddress = null;
protected int mPort = 0;
protected java.lang.String mMyCommunityName = null;
protected org.snmp4j.TransportMapping mServerSocket = null;
protected org.snmp4j.Snmp mSNMP = null;

public Handler() {
}

public void configure() {
mAddress = "192.168.10.191";
mPort = 161;
mMyCommunityName = "OAagent";
}

public void start() {
try {
mServerSocket = new org.snmp4j.transport.DefaultUdpTransportMapping(
new org.snmp4j.smi.UdpAddress(java.net.InetAddress
.getByName(mAddress), mPort));
mSNMP = new org.snmp4j.Snmp(mServerSocket);
mSNMP.addCommandResponder(this);
mServerSocket.listen();
} catch (java.net.UnknownHostException vException) {
System.out.println(vException);
} catch (java.io.IOException vException) {
System.out.println(vException);
}
}

public synchronized void processPdu(
org.snmp4j.CommandResponderEvent aEvent) {
java.lang.String vCommunityName = new java.lang.String(aEvent
.getSecurityName());
System.out.println("Community name " + vCommunityName);
org.snmp4j.PDU vPDU = aEvent.getPDU();
Config config=new Config();
if (vPDU == null) {
System.out.println("Null pdu");
} else {
System.out.println("(rcv) " + vPDU.toString());
switch (vPDU.getType()) {
case org.snmp4j.PDU.GET:
case org.snmp4j.PDU.GETNEXT:
break;
case org.snmp4j.PDU.SET:
System.out.println("------SET----------");
String reciv=vPDU.get(0).getVariable().getSyntaxString();
System.out.println("----set------"+vPDU.get(0).toString());
String setoid=vPDU.get(0).toString();
System.out.println("-----set-----"+setoid.substring(0, setoid.indexOf("=")-1));
System.out.println("-----set-----"+setoid.substring(setoid.indexOf("=")+1));
config.setValueByOID(setoid.substring(0, setoid.indexOf("=")-1).trim(), setoid.substring(setoid.indexOf("=")+1).trim());
}
org.snmp4j.mp.StatusInformation statusInformation = new org.snmp4j.mp.StatusInformation();
org.snmp4j.mp.StateReference ref = aEvent.getStateReference();
try {
System.out.println("Sending response");
vPDU.setType(PDU.RESPONSE);

OID oid=vPDU.get(0).getOid();
String setoid=vPDU.get(0).toString();
System.out.println("----get------"+setoid.substring(0, setoid.indexOf("=")-1));
System.out.println("-----get-----"+setoid.substring(setoid.indexOf("=")+1));
vPDU.set(0, new VariableBinding(oid,
new OctetString(config.getValueByOID(setoid.substring(0, setoid.indexOf("=")-1).trim()))));

aEvent.getMessageDispatcher().returnResponsePdu(
aEvent.getMessageProcessingModel(),

aEvent.getSecurityModel(),
aEvent.getSecurityName(),

aEvent.getSecurityLevel(), vPDU,
aEvent.getMaxSizeResponsePDU(), ref,

statusInformation);
} catch (org.snmp4j.MessageException vException) {
System.out.println(vException);
}
}
}
}

public static void main(String argv[]) {
Handler h = new Handler();
/** 初始化参数 * */
h.configure();
h.start();
/** Do nothing loop * */
while (true) {
System.out.println("----------loop-------------");
synchronized (OTAAgent.class) {
try {
OTAAgent.class.wait();
} catch (Exception e) {
}
}
}
}
}

还有一个就是获取和保存mib信息的类:



Java代码
package snmputil;  
 
import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.FileReader;  
import java.io.IOException;  
import java.util.HashMap;  
import java.util.Hashtable;  
import java.util.Map;  
import java.util.Properties;  
 
public class Config {  
    Properties properties;  
    Map map;  
 
    public Config() {  
        properties = new Properties();  
 
        try {  
            properties.load(new FileInputStream("mib.properties"));  
        } catch (IOException e) {  
            System.out.println("读取properties文件错误");  
            e.printStackTrace();  
        }  
    }  
 
    /** 
     * 根据oid获取value 
     *  
     * @param oid 
     * @return 
     */ 
    public String getValueByOID(String oid) {  
 
        return properties.getProperty(oid);  
 
    }  
 
    public void setValueByOID(String oid, String value) {  
          
        properties.setProperty(oid, value);  
        try {  
            properties.store(new FileOutputStream("mib.properties"),"mib.properties");  
        } catch (FileNotFoundException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }   
      
 
    }  
 
    //测试主函数  
       public static void main(String[] args) {  
           Config cfg=new Config();  
           String oid="1.3.6.1.2.1.1.8.0";  
           System.out.println("---------"+cfg.getValueByOID(oid));  
             
           cfg.setValueByOID(oid, "test");  
          
             
          
           System.out.println("---------"+cfg.getValueByOID(oid));  
       }  


package snmputil;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;

public class Config {
Properties properties;
Map map;

public Config() {
properties = new Properties();

try {
properties.load(new FileInputStream("mib.properties"));
} catch (IOException e) {
System.out.println("读取properties文件错误");
e.printStackTrace();
}
}

/**
* 根据oid获取value
*
* @param oid
* @return
*/
public String getValueByOID(String oid) {

return properties.getProperty(oid);

}

public void setValueByOID(String oid, String value) {

properties.setProperty(oid, value);
try {
properties.store(new FileOutputStream("mib.properties"),"mib.properties");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}

//测试主函数
   public static void main(String[] args) {
   Config cfg=new Config();
   String oid="1.3.6.1.2.1.1.8.0";
   System.out.println("---------"+cfg.getValueByOID(oid));
  
   cfg.setValueByOID(oid, "test");

  

   System.out.println("---------"+cfg.getValueByOID(oid));
   }
}

已有 0 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐