如何欺骗Java RMI/JMX,使其可以从本地主机外部访问,而无需对IP进行硬编码



如何在不硬编码IP的情况下欺骗Java RMI从本地主机外部访问?

由于无法使RMI绑定到0.0.0.0,因此解决方案是检测IP并使用它。

我在Linux和OS X上都使用了以下解决方案:

IP=$(ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*.){3}[0-9]*).*/2/p')
# if we have several IPs found, we pick the first one
for IP in $IP:
do
  break
done
CATALINA_OPTS="-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8081 
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.rmi.server.hostname=${IP} "

显然,这是一种不安全的配置方式,但您可以根据自己的需要对其进行调整。

最新更新