使用以下代码作为示例https://www.jitendrazaa.com/blog/java/snmp/create-snmp-client-in-java-using-snmp4j/当我将OID发送到空IP或没有SNMP的设备时,要监视网络,程序会引发异常。
我使用for循环读取IP。我试图以不同的方式改变执行流程,但没有成功。
该程序属于java的GetAsString方法。lang.NullPointerException
public class SNMPManager {
Snmp snmp = null;
String address = null;
/**
* Constructor
*
* @param add
*/
public SNMPManager(String add) {
address = add;
}
public static void main(String[] args) throws IOException {
/**
* Port 161 is used for Read and Other operations
* Port 162 is used for the trap generation
*/
for (int i = 37; i < 40; i++) {
System.out.println("ip x.x.x." + i);
SNMPManager client = new SNMPManager("udp:192.168.1." + i + "/161");
//SNMPManager client = new SNMPManager("udp:192.168.1.37/161");
client.start();
/**
* OID - .1.3.6.1.2.1.1.1.0 => SysDec
* OID - .1.3.6.1.2.1.1.5.0 => SysName
* => MIB explorer will be usefull here, as discussed in previous article
*/
String sysDescr = client.getAsString(new OID(".1.3.6.1.2.1.1.5.0"));
System.out.println(".1.3.6.1.2.1.1.5.0" + " - SysName: " + sysDescr);
String sysDescr2 = client.getAsString(new OID(".1.3.6.1.2.1.1.1.0"));
System.out.println(".1.3.6.1.2.1.1.1.0" + " - SysDec: " + sysDescr2);
}
}
/**
* Start the Snmp session. If you forget the listen() method you will not
* get any answers because the communication is asynchronous
* and the listen() method listens for answers.
*
* @throws IOException
*/
private void start() throws IOException {
TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
// Do not forget this line!
transport.listen();
}
/**
* Method which takes a single OID and returns the response from the agent as a String.
*
* @param oid
* @return
* @throws IOException
*/
public String getAsString(OID oid) throws IOException {
ResponseEvent event = get(new OID[]{oid});
return event.getResponse().get(0).getVariable().toString();
}
/**
* This method is capable of handling multiple OIDs
*
* @param oids
* @return
* @throws IOException
*/
public ResponseEvent get(OID oids[]) throws IOException {
PDU pdu = new PDU();
for (OID oid : oids) {
pdu.add(new VariableBinding(oid));
}
pdu.setType(PDU.GET);
ResponseEvent event = snmp.send(pdu, getTarget(), null);
if (event != null) {
return event;
}
throw new RuntimeException("GET timed out");
}
/**
* This method returns a Target, which contains information about
* where the data should be fetched and how.
*
* @return
*/
private Target getTarget() {
Address targetAddress = GenericAddress.parse(address);
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
target.setRetries(2);
target.setTimeout(1500);
target.setVersion(SnmpConstants.version2c);
return target;
}
使getAsString(OID OID)方法如下
public String getAsString(OID oid) throws IOException {
ResponseEvent event = get(new OID[]{oid});
if(event.getResponse() != null){
return event.getResponse().get(0).getVariable().toString();
} else {
return "no target"
}
}
没有目标,这就是空指针异常的原因
我已使用snmp4j api在SNMP代理上创建,但SNMP表注册存在问题 一旦我注册了表和表中的行。然后,如果我在表中设置值,所有行都会设置相同的值。我已经从JSON创建了snmp表 如果我设置了值,请在下表中 .1.3.6.1.4.1.1.201.6.2。它为下表中注册的所有行设置值。是否有人知道如何使用snmmpj代理正确注册和设置值。
有没有更惯用的方式来编写对map的重复调用(不使用flatMap)? 请参阅以下示例: 这是一个正在运行的函数,在这种情况下需要返回未来的[结果]。 我尝试过使用“理解”,但没有找到平面图的应用程序。我尝试使用flatMap的结果是我没有未来。
问题内容: 我想有一个不连接数据库就表现为mysql_real_escape_string的功能,因为有时我需要在没有数据库连接的情况下进行干式测试。mysql_escape_string已被弃用,因此是不可取的。我的一些发现: http://www.gamedev.net/community/forums/topic.asp?topic_id=448909 http://w3schools.in
我是SNMP新手,谢谢你的支持......我有一个子代理的现有Perl脚本,在尝试运行它时出现了以下问题:代理似乎连接到“默认”snmpd deamon,该deamon被配置为主代理(“master agentx”行存在于snmpd.conf中)。此时,脚本将一些值分配给我的MIB中的对象。但是,当我然后在master-agent上执行snmpwalk或snmpget时,我得到(对于v1查询)“结
问题内容: 我开始创建我的管道多分支环境,但是我遇到了一个问题。 我是否可以仅通过Jenkinsfile运行构建扫描以检测分支,而无需执行管道? 我的项目有不同的分支,当我从父管道多分支启动构建扫描时,我不想要所有带有Jenkinsfile的分支的所有子管道。 感谢您的帮助! 问题答案: 在“ 分支源” 部分,您可以添加一个名为“抑制自动SCM触发”的属性。 这样可以防止Jenkins使用。
我正在尝试使用snmp4j模拟SNMP代理。我正在向代理注册MOs。下面是代码段: 当启动代理时,我得到了DuplicateInstrationException。请指导我如何注册类。请提供方向。