代码之家  ›  专栏  ›  技术社区  ›  Krystian Cybulski

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

  •  0
  • Krystian Cybulski  · 技术社区  · 16 年前

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

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

    这很管用。我可以启动JConsole并连接到我的机器上的JMXèu端口,然后会出现漂亮的图形。

    有个问题。这将导致JMX服务器绑定到所有接口上的JMX\u端口。我只想把它绑定到127.0.0.1。否则,这对我来说是个安全问题。

    根据文件, JMXServiceURL jmxUrl = new JMXServiceURL(null,null,config.getJmxRemotePort()); 使用默认的jmcepxmp协议创建主机。我曾尝试将“127.0.0.1”明确地指定为要绑定到的地址,但也不起作用。

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

    1 回复  |  直到 16 年前
        1
  •  0
  •   cletus    16 年前

    运行以下代码:

    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”。