-
-
Save akirad/5597203 to your computer and use it in GitHub Desktop.
| import java.io.IOException; | |
| import java.util.List; | |
| import org.snmp4j.CommunityTarget; | |
| import org.snmp4j.Snmp; | |
| import org.snmp4j.TransportMapping; | |
| 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; | |
| import org.snmp4j.util.DefaultPDUFactory; | |
| import org.snmp4j.util.TreeUtils; | |
| import org.snmp4j.util.TreeEvent; | |
| public class Snmpwalk { | |
| private String targetAddr; | |
| private String oidStr; | |
| private String commStr; | |
| private int snmpVersion; | |
| private String portNum; | |
| private String usage; | |
| Snmpwalk() throws IOException { | |
| // Set default value. | |
| targetAddr = null; | |
| oidStr = null; | |
| commStr = "public"; | |
| snmpVersion = SnmpConstants.version2c; | |
| portNum = "161"; | |
| usage = "Usage: snmpwalk [-c communityName -p portNumber -v snmpVersion(1 or 2)] targetAddr oid"; | |
| } | |
| private void execSnmpwalk() throws IOException { | |
| Address targetAddress = GenericAddress.parse("udp:"+ targetAddr + "/" + portNum); | |
| TransportMapping<? extends Address> transport = new DefaultUdpTransportMapping(); | |
| Snmp snmp = new Snmp(transport); | |
| transport.listen(); | |
| // setting up target | |
| CommunityTarget target = new CommunityTarget(); | |
| target.setCommunity(new OctetString(commStr)); | |
| target.setAddress(targetAddress); | |
| target.setRetries(3); | |
| target.setTimeout(1000 * 3); | |
| target.setVersion(snmpVersion); | |
| OID oid; | |
| try { | |
| oid = new OID(translateNameToOID(oidStr)); | |
| } catch (Exception e) { | |
| System.err.println("Failed to understand the OID or object name."); | |
| throw e; | |
| } | |
| // Get MIB data. | |
| TreeUtils treeUtils = new TreeUtils(snmp, new DefaultPDUFactory()); | |
| List<TreeEvent> events = treeUtils.getSubtree(target, oid); | |
| if(events == null || events.size() == 0) { | |
| System.out.println("No result returned."); | |
| System.exit(1); | |
| } | |
| // Handle the snmpwalk result. | |
| for (TreeEvent event : events) { | |
| if(event == null) { | |
| continue; | |
| } | |
| if (event.isError()) { | |
| System.err.println("oid [" + oid + "] " + event.getErrorMessage()); | |
| continue; | |
| } | |
| VariableBinding[] varBindings = event.getVariableBindings(); | |
| if(varBindings == null || varBindings.length == 0) { | |
| continue; | |
| } | |
| for (VariableBinding varBinding : varBindings) { | |
| if (varBinding == null) { | |
| continue; | |
| } | |
| System.out.println( | |
| varBinding.getOid() + | |
| " : " + | |
| varBinding.getVariable().getSyntaxString() + | |
| " : " + | |
| varBinding.getVariable()); | |
| } | |
| } | |
| snmp.close(); | |
| } | |
| private String translateNameToOID(String oidStr) { | |
| switch (oidStr) { | |
| case "mib-2": | |
| oidStr = ".1.3.6.1.2.1"; | |
| break; | |
| case "mib2": | |
| oidStr = ".1.3.6.1.2.1"; | |
| break; | |
| case "system": | |
| oidStr = ".1.3.6.1.2.1.1"; | |
| break; | |
| case "interfaces": | |
| oidStr = ".1.3.6.1.2.1.2"; | |
| break; | |
| case "at": | |
| oidStr = ".1.3.6.1.2.1.3"; | |
| break; | |
| case "ip": | |
| oidStr = ".1.3.6.1.2.1.4"; | |
| break; | |
| case "icmp": | |
| oidStr = ".1.3.6.1.2.1.5"; | |
| break; | |
| case "tcp": | |
| oidStr = ".1.3.6.1.2.1.6"; | |
| break; | |
| case "udp": | |
| oidStr = ".1.3.6.1.2.1.7"; | |
| break; | |
| case "egp": | |
| oidStr = ".1.3.6.1.2.1.8"; | |
| break; | |
| case "transmission": | |
| oidStr = ".1.3.6.1.2.1.10"; | |
| break; | |
| case "snmp": | |
| oidStr = ".1.3.6.1.2.1.11"; | |
| break; | |
| } | |
| return oidStr; | |
| } | |
| private void setArgs(String[] args) { | |
| if(args.length < 2) { | |
| System.err.println(usage); | |
| System.exit(1); | |
| } | |
| for (int i=0; i<args.length; i++) { | |
| if("-c".equals(args[i])) { | |
| commStr = args[++i]; | |
| } | |
| else if ("-v".equals(args[i])) { | |
| if(Integer.parseInt(args[++i]) == 1) { | |
| snmpVersion = SnmpConstants.version1; | |
| } | |
| else { | |
| snmpVersion = SnmpConstants.version2c; | |
| } | |
| } | |
| else if ("-p".equals(args[i])) { | |
| portNum = args[++i]; | |
| } | |
| else{ | |
| targetAddr = args[i++]; | |
| oidStr = args[i]; | |
| } | |
| } | |
| if(targetAddr == null || oidStr == null) { | |
| System.err.println(usage); | |
| System.exit(1); | |
| } | |
| } | |
| // Delegate main function to Snmpwalk. | |
| public static void main(String[] args) { | |
| try{ | |
| Snmpwalk snmpwalk = new Snmpwalk(); | |
| snmpwalk.setArgs(args); | |
| snmpwalk.execSnmpwalk(); | |
| } | |
| catch(Exception e) { | |
| System.err.println("----- An Exception happened as follows. Please confirm the usage etc. -----"); | |
| System.err.println(e.getMessage()); | |
| e.printStackTrace(); | |
| } | |
| } | |
| } |
Hi Eswaramoorthy
Thank you for you comment, and sorry for my late answer.
If you are still looking for the answer, please check my answer.
I think if you change the following code, it should work.
[Before]
oidStr = "1.3.6.1.4.1.7950.2.10.31.3.0";
[After]
oidStr = "1.3.6.1.4.1.7950.2.10.31.3";
This code is for snmpwalk, so it doesn't need the instance number of MIB.
In the case of snmpget, you need it.
Best regards,
Akira
hi
i following your code and i run command in terminal
java -cp .:snmp4j-2.2.5.jar -c y5entSnmp -p 161 -v 1 10.8.72.134 iso.3.6.1.2.1.2.2.1.10.5
get error message
OID is not specified correctly.
please help me.
Best Regards
phat
Hi,
In this code varBinding.getVariable()) gives the value without its units. Is there a way to get the value with its units?
Thank you.
Sorry that I didn't sign-in the git-hub for a while...
HENG-SOPHAT
I dont think snmp4j supports an input like "iso.3.6.1.2.1.2.2.1.10.5". It should be "1.3.6.1.2.1.2.2.1.10.5".sajinidesilva
I cant catch the meaning of "units". Please check the javadoc for snmp4j...
HI I am following this code and stuck at some point.Any help will be highly appreciated.
Here is my code below:
import java.io.IOException;
import java.util.List;
import org.snmp4j.CommunityTarget;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
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;
import org.snmp4j.util.DefaultPDUFactory;
import org.snmp4j.util.TreeUtils;
import org.snmp4j.util.TreeEvent;
public class Snmpwalk {
private String targetAddr;
private String oidStr;
private String commStr;
private int snmpVersion;
private String portNum;
private String usage;
Snmpwalk() throws IOException{
// Set default value.
targetAddr = "66.162.110.25";
oidStr = "1.3.6.1.4.1.7950.2.10.31.3.0";
commStr = "BPMDemo";
snmpVersion = SnmpConstants.version2c;
portNum = "161";
usage = "Usage: snmpwalk -c BPMDemo -v 2c targetAddr oid";
}
private void doSnmpwalk() throws IOException {
Address targetAddress = GenericAddress.parse("udp:"+ targetAddr + "/" + portNum);
TransportMapping transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
transport.listen();
}
private void checkAndSetArgs(String[] args){
if(args.length < 2){
System.err.println(usage);
System.exit(1);
}
}
// Delegate main function to Snmpwalk.
public static void main(String[] args){
try{
Snmpwalk snmpwalk = new Snmpwalk();
snmpwalk.checkAndSetArgs(args);
snmpwalk.doSnmpwalk();
}
catch(Exception e){
System.err.println("----- An Exception happend as follows. Please confirm the usage. -----");
e.printStackTrace();
System.err.println("--------------------");
}
}
}
and from the terminal I am running the command
java -cp .:snmp4j-2.2.2.jar Snmpwalk -c BPMDemo -p 161 -v 2
The result output i always get as No result found !.
with the same config I could get proper response from MIB Browser.(http://oi44.tinypic.com/25s279x.jpg)
Please help me to find where i am going wrong.
Thanks.