【问题标题】:Create SNMP Client in JAVA Using SNMP4j for ipv6 addresses在 JAVA 中使用 SNMP4j 为 ipv6 地址创建 SNMP 客户端
【发布时间】:2015-07-13 14:47:26
【问题描述】:

我正在尝试在 JAVA 中创建 SNMP 客户端。

SNMPManager client = new SNMPManager("udp:73.251.102.191/162");

这对于 ipv4 地址来说很好,但是当我尝试对 ipv6 地址执行相同操作时,它会引发以下错误。

错误:

---------------Exception in thread "main" org.snmp4j.MessageException: No route to host
at org.snmp4j.MessageDispatcherImpl.sendPdu(Unknown Source)
at org.snmp4j.Snmp.sendMessage(Unknown Source)
at org.snmp4j.Snmp.send(Unknown Source)
at org.snmp4j.Snmp.send(Unknown Source)
at snmpTrial1.SNMPManager.get(SNMPManager.java:55)
at snmpTrial1.SNMPManager.getAsString(SNMPManager.java:45)
at snmpTrial1.SNMPManager.main(SNMPManager.java:34)

代码:此代码适用于 ipv4 地址,但不适用于 ipv6

public class SNMPManager {
Snmp snmp = null;
String address = null;
public SNMPManager(String add)
{
    address = add;
}
public static void main(String[] args) throws IOException {
    SNMPManager client = new SNMPManager("udp:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/162"); // ipv6 address
    client.start();
    String sysDescr = client.getAsString(new OID(".1.3.6.1.4.1.4115.1.20.1.1.3.62.4.1.1.1"));
    System.out.println(sysDescr);
}
private void start() throws IOException {
    TransportMapping transport = new DefaultUdpTransportMapping();
    snmp = new Snmp(transport);
    transport.listen();
}

public String getAsString(OID oid) throws IOException {
    ResponseEvent event = get(new OID[] { oid });
    return event.getResponse().get(0).getVariable().toString();
}
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");
}
private Target getTarget() {
    Address targetAddress = GenericAddress.parse(address);
    CommunityTarget target = new CommunityTarget();
    target.setCommunity(new OctetString("xxxxx"));
    target.setAddress(targetAddress);
    target.setRetries(2);
    target.setTimeout(2000);
    target.setVersion(SnmpConstants.version2c);
    return target;
}

}

【问题讨论】:

  • 能否请您使用更多代码更新您的问题,以帮助我们了解可能发生错误的位置以及原因?
  • 请编辑您的问题以包含您的 cmets 的内容。这属于问题的一部分不是评论
  • 我不是在指手画脚,我是在帮助您以正确的格式提出您的问题以获得答案。在它的原始状态下,它很可能因为没有足够的上下文信息而被关闭。
  • 异常提示没有从适配器 IP 地址到目标 IP 地址的路由。我会使用 traceroute 等操作系统工具进行调查。

标签: java snmp ipv6 snmp4j


【解决方案1】:

如果您的操作系统是 MAC OSX,那么 Java 7 和 8 存在与 IPv6 和套接字连接相关的错误。这是链接:jvm bugJava 6 似乎工作正常。

【讨论】:

    【解决方案2】:

    我找到了解决方案。 对于 ipv6 地址,我们应该具有如下格式 GenericAddress.parse("udp:[XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX]/162");

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多