我有一个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。
答案 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”。