如何从IP解析DNS名称?

How to resolve the DNS name from IP?

提问人:membersound 提问时间:10/7/2020 更新时间:10/7/2020 访问量:829

问:

我想从客户端 IP 地址解析域名。在测试中,我使用了 stackoverflow,如下所示。但是当我使用 ip 解析域时,我仍然只得到 IP 作为结果。

    String ip = InetAddress.getByName("www.stackoverflow.com").getHostAddress();
    System.out.println(ip);
    System.out.println(InetAddress.getByName(ip).getHostName());
    System.out.println(InetAddress.getByName(ip).getCanonicalHostName());
    System.out.println(InetAddress.getByName(ip).getHostAddress());

结果:

151.101.129.69
151.101.129.69
151.101.129.69
151.101.129.69

如果我只给出了 ip,我怎样才能获得域名 (stackoverflow / www.stackoverflow.com)?151.101.129.69

Java DNS

评论

2赞 RealSkeptic 10/7/2020
无论使用哪种编程语言,如果域的所有者没有为该 IP 设置 PTR 记录,您将无法这样做(有关详细信息,请查看“DNS PTR 记录”)。此外,每个 IP 可能有许多与之关联的域名。
1赞 luk2302 10/7/2020
你不能。例如,请参阅 whatismyip.com/reverse-dns-lookup“请注意,某些 IP 地址不会返回域名,因为可能有记录指示给定 IP 地址的多个域名。常见的例子包括共享虚拟主机,其中服务器的一个IP地址在一个或多个域之间共享。
0赞 luk2302 10/7/2020
例如,将其与 <=> 进行比较,在这种情况下,dns 和反向 dns 可以工作,但这只是因为谷歌希望它这样做。dns.google8.8.8.8

答:

2赞 Stephen C 10/7/2020 #1

我尝试对“www.stackoverflow.com”进行正向然后反向查找,很明显,stackoverflow 的管理员尚未为此 IP 设置允许 Java 反向查找站点的 DNS 名称的 DNS PTR 记录。

(反向查找失败的另一种情况是没有 DNS 名称映射到给定的 IP 地址。

这不是 Java 特有的问题。您将在任何语言中获得相同的行为。这实际上是DNS设计的结果,也是DNS在实践中的使用方式的结果。

这个问题没有真正的解决方案。您需要编写应用程序代码,以允许无法解析为 DNS 地址的 IP 地址。


郑重声明,这就是我使用该工具得到的。(出于安全原因,一些细节被掩盖了)。dig

$ dig www.stackoverflow.com

; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> www.stackoverflow.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52578
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: zzzzzz (good)
;; QUESTION SECTION:
;www.stackoverflow.com.     IN  A

;; ANSWER SECTION:
www.stackoverflow.com.  3600    IN  CNAME   stackoverflow.com.
stackoverflow.com.  2760    IN  A   151.101.129.69
stackoverflow.com.  2760    IN  A   151.101.193.69
stackoverflow.com.  2760    IN  A   151.101.1.69
stackoverflow.com.  2760    IN  A   151.101.65.69

;; Query time: 22 msec
;; SERVER: xx.xx.xx.xx
;; WHEN: Wed Oct 07 19:49:12 AEDT 2020
;; MSG SIZE  rcvd: 156

$ dig -x 151.101.129.69

; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> -x 151.101.129.69
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 43513
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: zzzzzz (good)
;; QUESTION SECTION:
;69.129.101.151.in-addr.arpa.   IN  PTR

;; AUTHORITY SECTION:
151.in-addr.arpa.   3600    IN  SOA pri.authdns.ripe.net. dns.ripe.net. 1586416382 3600 600 864000 3600

;; Query time: 34 msec
;; SERVER: xx.xx.xx.xx
;; WHEN: Wed Oct 07 19:49:26 AEDT 2020
;; MSG SIZE  rcvd: 168