从java的InetAddress类的gethostbyname函数中获取ip地址而不是主机名

从java的InetAddress类的gethostbyname函数中获取ip地址而不是主机名,java,dns,network-programming,Java,Dns,Network Programming,如何从java中的InetAddress类的gethostbyname函数中获取IP地址?使用以下代码,我不会从本地计算机的ip地址获取主机名 import java.net.InetAddress; class GetHost{ public static void main(String args[])throws Exception{ String hostIp=args[0]; InetAddress addr = InetAddress.g

如何从java中的
InetAddress
类的
gethostbyname
函数中获取IP地址?使用以下代码,我不会从本地计算机的ip地址获取主机名

import java.net.InetAddress;

class GetHost{

    public static void main(String args[])throws Exception{

        String hostIp=args[0];
        InetAddress addr = InetAddress.getByName(hostIp);
        String host = addr.getHostName();
        if(host.endsWith(".local"))
        {
            int lenght=host.length() ;
            System.out.print(""+host.substring(0,lenght-6));

        }
        else
            System.out.print(host);

    }
 }
private InetAddress getIP()引发SocketException{
枚举nis=NetworkInterface.getNetworkInterfaces();
网络接口;
而(nis.hasMoreElements()){
ni=nis.nextElement();
如果(!ni.isLoopback()&&ni.isUp()){
对于(InterfaceAddress ia:ni.getInterfaceAddresses()){
如果(ia.getAddress().getAddress().length==4){
返回ia.getAddress();
}
}
}
}
返回null;
}

此代码返回电脑的本地ip地址。对getHostName进行简单更改即可。

您有这样一行的主机文件吗

127.0.0.1 localhost
在您的代码中,getByName将返回一个带有IP地址但没有主机名的InetAddress。调用getHostName时,它将尝试获取InetAddress对象中的主机名,如果该主机名不存在,该函数将执行反向查找地址

如果您的主机文件未使用您正在传递的IP进行更新,则将发送一个反向DNS查询。我假设没有具有主机名称和地址的DNS服务器,因此需要更新主机文件。在linux中,它位于/etc/hosts中。在Windows中,它位于C:\Windows\System32\drivers\etc中

顺便说一句,您还可以使用:

InetAddress.getLocalHost()
但是如果在hosts文件中没有正确的条目,您也会遇到同样的问题


我希望这能有所帮助。

有人告诉我我的dns机器坏了。如果是这样,那么如何配置它呢?您得到了什么?
getByName(字符串主机)
根据主机名确定主机的IP地址。给定ip地址,它不会获取主机名。不,我想从本地ip获取机器的主机名。所以我的java代码没有返回我的主机名。它将返回我提供给它的相同ip。在网络(LAN)中,计算机的主机名是它的ip。纳特是一个完全不同的故事。。。有家庭/家庭的ip,然后是路由器上连接设备的LAN ip。我的本地ip是192.168.1.2我通过nat的主机名是192.168.1.2.tpg.com.au或类似的东西。@Sanket好的,我相信我理解你知道的。如果你不想得到另一台计算机的主机名,那台计算机必须告诉你,你不能只抓取它。但我上面发布的代码在我朋友的机器上工作,而不是在我的机器上,所以我是居里夫妇,为什么呢?也就是说,代码是从它的ip返回机器的主机名
InetAddress.getLocalHost()