我运行一个Java应用程序,它提供了在线工具。该应用程序在Ubuntu下的亚马逊网络服务EC2实例上运行。有弹性IP,AWS控制台上报的外网IP和内网IP均稳定。前端访问和证书工作正常。
但是,存在与Java检测到的IP地址相关的问题。申请许可过程使用IP地址来生成主机id,并且我发现通过应用许可过程获得的IP地址是不稳定的-它每1分钟改变一次,这导致许可不匹配,因为许可与IP地址相关联。
使用下面的代码(由应用程序供应商提供),我记录了Java获得的IP地址(因为它们每分钟都在变化),它们与外部或私有IP地址完全不同。我发现它们解析到AWS服务器(可能是DNS服务器?)位于美国西海岸和美国东海岸。该实例位于欧盟西部。
import java.net.*;
class IPTest {
public static void main(String[] args) {
getIPAddresses();
}
public static void getIPAddresses() {
try {
InetAddress in = InetAddress.getLocalHost();
InetAddress[] all = InetAddress.getAllByName(in.getHostName());
for (int i = 0; i < all.length; i++) {
System.out.println(all[i].getHostAddress());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}我不知道这是AWS问题、DHCP问题、应用程序问题,还是Tomcat配置错误。我真的很感激在这个问题上能帮上忙。
发布于 2015-04-20 02:18:29
这个问题现在已经解决了。
Java以一种相当复杂的方式获取IP地址,它使用主机名来获取IP地址。主机名指向一个已移动到亚马逊网络服务Route53上的域名。Java被返回内部亚马逊网络服务Route53的IP地址,碰巧每1分钟改变一次。将主机名更改为EC2私有DNS已经解决了该问题,并且现在可以正确地返回EC2私有IP地址。
https://stackoverflow.com/questions/29694912
复制相似问题