-
-
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.