InetAddress.getLocalHost()返回本机的IP地址
(2010-11-25 16:18:50)
标签:
java获取ip杂谈 |
分类: 各种系统配置 |
如题,使用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)解决问题的思路比问题的答案更有意思。
令我不解的是,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)解决问题的思路比问题的答案更有意思。