我不能让Java JMX服务器只绑定到127.0.0.1!

时间:2010-02-22 01:45:25

标签: java jmx

我有一个java服务器。我希望能够使用JMX客户端连接到它。 我这样做:

JMXServiceURL jmxUrl = new JMXServiceURL(null,null,JMX_PORT);
JMXConnectorServer jmxRemoteServer;
jmxRemoteServer=JMXConnectorServerFactory.newJMXConnectorServer(jmxUrl, jmxEnvironment, server);
jmxRemoteServer.start();

这很有效。我可以启动JConsole并连接到我的机器上的JMX_PORT,并显示漂亮的图形。

有一个问题。这会导致JMX服务器在所有接口上绑定到JMX_PORT。我想让它仅绑定到127.0.0.1。否则,这对我来说是一个安全问题。

根据文档,JMXServiceURL jmxUrl = new JMXServiceURL(null,null,config.getJmxRemotePort());应使用默认协议(jmxmp)和localhost创建JMXServiceURL。我试着明确地给它“127.0.0.1”作为绑定的地址,但它也没有用。

Java的JMX服务器绑定到所有IP地址,并且拒绝仅绑定到127.0.0.1。

1 个答案:

答案 0 :(得分:0)

运行此代码:

public static void main(String args[]) {
  try {
    InetAddress local = InetAddress.getLocalHost();
    System.out.println("Host address: " + local.getHostAddress());
    System.out.println("Host name: " + local.getHostName());
    System.out.println("Canonical host name: " + local.getCanonicalHostName());
    System.out.println("Address: " + local.getAddress());
  } catch (UnknownHostException e) {
    e.printStackTrace();
  }
}

如果您将null作为主机参数传递,则该类使用InetAddress.getLocalHost().getHostName()。对我来说至少它不返回“127.0.0.1”,它使用我的机器名称,根据描述实际上看起来是错误的(这不是我的环回地址)。该地址可供其他机器使用。当你尝试时会发生什么:

JMXServiceURL jmxUrl = new JMXServiceURL("http","127.0.0.1",JMX_PORT);

或:

JMXServiceURL jmxUrl = new JMXServiceURL(null,"127.0.0.1",JMX_PORT);

如果未提供,协议默认为“jmxmp”。