【Linux】Java获取Linux本机ip为127.0.0.1的解决方法

前言

  • 参考博客:Java获取Linux本机ip为127.0.0.1的解决方法
  • 最近新部署了一台服务器,环境搭建好后,运行相应的项目代码时,发现项目获取的服务器IP地址不是我想要的
  • Java代码中使用了Inet4Address.getLocalHost().getHostAddress()方法自动获取本机IP,结果发现获取到的值是127.0.0.1,而不是对外的IP地址
  • 这里特此记录一下解决方法


原因

  • 新安装的Linux系统中,主机名称也就是hostname,默认是localhost(可以使用hostname命令查看当前服务器的名称)

  • 查看/ect/hosts文件可以发现,localhost也分别被映射到了ipv4和ipv6这两个ip地址协议上

    • [root@localdomain_5 ~]# cat /etc/hosts
      127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
      ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
      
  • 所以当我们在服务器中执行ping localhost命令时,解析localhost得到的ip地址实际上是/ect/hosts文件中映射的ipv4地址,也就是127.0.0.1,而不是我们预期的对外ip地址

  • Java获取IP时是通过本机hostname解析的,这也就解释了为什么在代码中使用Inet4Address.getLocalHost().getHostAddress()方法获取到的ip地址不是我们想要的了

解决办法

  • 使用hostnamectl set-hostname命令手动指定本机名称, 避免与/ect/hosts文件中配置的名称重复
  • 这样我们在使用Inet4Address.getLocalHost().getHostAddress()方法就会被正确解析成对外的ip地址了
    • hostnamectl set-hostname xxxx
    • 可以使用ping xxxx来查看解析的ip地址,应该已不是127.0.0.1,而是对外ip
posted @ 2022-08-14 23:43  中国制造  阅读(2506)  评论(0编辑  收藏  举报