一个程序,要求获得本地IP地址:
[coolcode lang=”java”]
import java.net.InetAddress;
import java.net.UnknownHostException;
public class NsLookup {
static public void main(String[] args) {
try {
InetAddress address = InetAddress.getLocalHost();
System.out.println(address.toString().split(“/”)[1].toString());
String name = address.getHostName();
System.out.println(name);
InetAddress[] addresses = InetAddress.getAllByName(name);
for(int i=0;i<addresses.length;i++){
System.out.println(addresses[i].toString().split(“/”)[1].toString());
}
catch(UnknownHostException uhe) {
System.err.println(“Unable to find IP”);
}
}
}
[/coolcode]
在windows下很正常:
173.26.100.174
ibmtc-marvel
173.26.100.174
192.168.0.1
linux下出现问题:
46和18的结果为:
127.0.0.1
ftp.cs.hit.edu.cn/ibmtc
127.0.0.1
即只获得了本地的环回地址,而没有获得其他的IP
而19更加神奇:
202.118.250.20
dns.cs.hit.edu.cn
202.118.250.20
出来的IP地址是另外一台机器的,不是何故
这个问题似乎与一台机器的IP个数无关,单IP和多IP的主机都会出现这个问题.有没 有兄弟懂这个的?
总结一下吧。原信中的java代码的实现就是先获取本机的主机名,然后获得ipaddress。底层实现就是解析/etc/hosts文件,找到相应的主机名,取出IP地址例如:[root@dns marvel]# vi /etc/hosts 1 202.118.250.19 IbmDNS.cs.hit.edu.cn IbmDNS 2 173.26.100.99 IbmDNS.cs.hit.edu.cn IbmDNS 3 173.26.100.99 IbmDNS.cs.hit.edu.cn dns.cs.hit.edu.cn 4 173.26.100.99 IbmDNS.cs.hit.edu.cn dns 5 127.0.0.1 localhost localhost.localdomain 6 202.118.250.19 dns.cs.hit.edu.cn IbmDNS 7 173.26.100.99 dns.cs.hit.edu.cn IbmDNS由于主机名为dns.cs.hit.edu.cn程序会找到所有含有dns.cs.hit.edu.cn的列,返回对应的IP地址,上例运行结果为:0 all 173.26.100.991 all 202.118.250.192 all 173.26.100.99至于之前的问题,是因为18的默认配置只有127.0.0.1一项,而19的配置却使用了IbmDNS.cs.hit.edu.cn而不是 dns.cs.hit.edu.cn,自然就没有正确的IP了。但是至于为什么出现250.20这个IP,现在没有比较好的解释。在此要感谢刘斌,这个问题花了我们一个晚上的时间