java - Inetaddress 返回意外的主机名

标签 java network-programming

我有下面的代码,在继续之前我用它来获取服务器的完整规范主机名。 这将在我的服务器上返回一个值(特别是不同的域)。命令行上的 nslookup 返回正确的值。

我试图了解 java.inet 在内部到底做了什么来解析正确的完整规范名称。 它会查询 DNS 服务器吗?

import java.net.InetAddress;

public class IpLookup {

    public static void main(String[] args) {

        try{

            String REQUESTSERVER = args[0];  
            InetAddress in = InetAddress.getByName(REQUESTSERVER);
            REQUESTSERVER = in.getCanonicalHostName();
            System.out.println("Canonical REQUESTSERVER "+ REQUESTSERVER );
        } catch(Exception e) {
            System.out.println("lookup failed");
        }
    }
}

最佳答案

发生的情况是 nslookup 返回您输入的主机名及其 IP 地址,而 Java 代码首先查找 IP,然后根据返回的 IP 地址使用反向 DNS。 rDNS 可能未配置为返回您认为的“规范”地址。

我在 www.google.com 上运行了 nslookup:

> www.google.com
Non-authoritative answer:
Server:  perseus.jhmg.pvt
Address:  192.168.10.254

Name:    www.google.com
Addresses:  2607:f8b0:400a:801::1010
          173.194.33.146
          173.194.33.144
          173.194.33.148
          173.194.33.147
          173.194.33.145

然后我在 www.google.com 上运行您的程序并得到以下结果:

Canonical REQUESTSERVER sea09s17-in-f17.1e100.net

对 nslookup 返回的第一个地址进行反向 DNS 搜索会得到:

> 173.194.33.146
Server:  perseus.jhmg.pvt
Address:  192.168.10.254

Name:    sea09s17-in-f18.1e100.net
Address:  173.194.33.146

(顺便说一句,注意 1e100 是 10100 或称为“googol”的数字...可爱:-)

这证明这就是正在发生的事情。

关于java - Inetaddress 返回意外的主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20208551/

相关文章:

java - 在列表中添加名称/值

java - 以编程方式发现网络

sockets - 如何格式化 HTTP 响应

golang : tls. LoadX509KeyPair 关闭 net.Conn?

c++ - 使用 C++ 在计算机之间发送文件

java - 能帮我搜集一份Java Best Practices在线资料合集吗?

java - 使用 double 类型时在 Java 中转换为整数

java - 在Java中解析JSON uint32/uint64数字

java - 在 Java 中实现 FTP - 连接到 PASV 命令的 227 响应中指定的端口

java - 找不到lib处理