Я не могу заставить сервер Java JMX связываться только с 127.0.0.1! - PullRequest
0 голосов
/ 22 февраля 2010

У меня есть сервер 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()); должен создать JMXServiceURL с протоколом по умолчанию (jmxmp) и localhost. Я попытался явно указать его как 127.0.0.1 в качестве адреса для привязки, и он тоже не работал.

Сервер Java JMX связывается со всеми IP-адресами и отказывается связываться только с 127.0.0.1.

1 Ответ

0 голосов
/ 22 февраля 2010

Запустите этот код:

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

...