zoukankan      html  css  js  c++  java
  • InetAddress.getLocalHost()返回ip 地址异常听问题

    最近把服务集群中的接口调用记录到日志中,用以记录每台主机上各服务的性能情况,部署后外现内网的服务器IP取的都是127.0.0.1 这个地址。查了下资料,现在把这个区别记录下:

    如题,使用InetAddress.getLocalHost()返回了  hostname/ip
    令我不解的是,ip与本机的IP不匹配。
    解决问题的思路:
    1)把这段程序拷贝到其它机器,执行结果正常,排除使用api不当的问题。
    2)在/etc下查找返回的hostname值的位置,我使用的是geetoo Linux系统,返回/etc/conf.d/hostname
    以同样的方式在另外一台机器上查找,另外一台机器使用的是redhat Linux, 位于/etc/sysconfig/network
    ,然后查看/etc/hosts,发现该机器上的对应hostname的值可以找到,并且对应为正确的ip地址。
    于是,回到自己机器,查看/etc/hosts,将机器IP对应的hostname修改成/etc/conf.d/hostname一致。
    问题解决。

    3)没有查看InetAddress的源码,但可以猜测它检索/etc/hosts文件中对应hostname的值,然后返回IP。
    为了验证该假设,修改/etc/hosts的hostname对应的IP的值,然后执行程序,结果与预测一致。

    4)InetAddress查找IP地址是一个很方便的方法,但是我们需要考虑的问题的是,如果/etc/hosts不可靠,结果面目全非。在baidu上搜索的时候,有一个兄弟使用ProcessBuilder来执行/sbin/ipconfig 来获取对应eth0的地址,遭到了下面的同志抨击,使用InetAddress就可以了,现在分析来,使用ProcessBuilder来直接执行命令,获取结果是一个非常可靠的办法。一个大的系统如果这里有问题,就会是大问题。

    5)解决问题的思路比问题的答案更有意思。

    原文:http://blog.sina.com.cn/s/blog_4a1f59bf0100n2pe.html

  • 相关阅读:
    SQL 游标使用实例 no
    C# DataTable 转换成JSON数据 no
    css设置滚动条的样式 no
    C# DataTable 转换成JSON数据 no
    springboot项目打包jar 并打包为exe启动
    springboot 项目启动自动打开浏览器访问网站设置
    springboot启动创建系统托盘及功能
    关于Web Service
    最近的我
    C++ wstring和string相互转换
  • 原文地址:https://www.cnblogs.com/hnucdj/p/4679718.html
Copyright © 2011-2022 走看看