【问题标题】:jconsole connecting to ipv6 JMX service URLjconsole 连接到 ipv6 JMX 服务 URL
【发布时间】:2011-02-01 17:38:41
【问题描述】:

我无法通过 jconsole 连接到具有 IPv6 地址的 JMX 服务 URL。我试过了

service:jmx:rmi:///jndi/rmi://[fd02:c9e3:a6c0:4306:0:0:0:27]:5500/jmx  

我得到了

连接没有成功..

至于一些背景,

  • 我正在从我的 Windows 7 机器运行 jconsole 并连接到 linux 上的 jmx 服务器。
  • jmx 服务器是dual stacked Redhat linux 机器,我可以使用 IPv4 地址通过 jconsole 进行连接。
  • 不确定这是否相关,我尝试连接的主机有 2 个网络接口,其中一个仅用于管理目的。

【问题讨论】:

  • 只是检查一下,您是否在客户端设置了身份验证或在服务器上禁用了身份验证?
  • 您的应用是否真的在 IPv6 套接字上侦听 jmx 连接?
  • 您是否检查了基本连接?首先尝试ping fd02:c9e3:a6c0:4306:0:0:0:27,然后在命令提示符下尝试telnet fd02:c9e3:a6c0:4306:0:0:0:27 5500,查看端口是否打开(如果没有,您将收到“连接被拒绝”)。 Telnet 可以通过Control Panel > Programs and Features > Turn Windows Features on or off > Telnet client 安装,如果它还没有的话。
  • @Heiko/Mike 感谢您的投入。我认为我的服务器进程需要使用 '[]' 来转义 ':' 作为 JMX URL 的一部分。
  • @sfrocks:你能发布你所做的例子吗?据我记得,您可以回答自己的帖子 - 我觉得这可能对其他人有所帮助。

标签: java remoting jmx ipv6


【解决方案1】:

好的,我添加了以下条件以将服务器主机地址包装在方括号中。

    if ( aHost instanceof Inet4Address ) {
       this.hostAddress = aHost.getHostAddress();
    }
    else if ( aHost instanceof Inet6Address ) {
       this.hostAddress = "[" + aHost.getHostAddress() + "]";
    }
    else {
       throw someException();
    }

.............some other stuff.................

    registry = LocateRegistry.getRegistry( this.hostAddress, ... );

实际上,主机地址在属性文件中被指定为名称值对。因此,我可以像下面那样做,但由于其他原因它不起作用。

.properties 文件

主机名 = [fd02:c9e3:a6c0:4306:0:0:0:27]

【讨论】:

  • 这实际上是错误的:根据 [RFC2732][1],URL 中需要“[]”,它们不是主机名的一部分。 [1]:tools.ietf.org/html/rfc2732
猜你喜欢
  • 1970-01-01
  • 2016-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多