获取WAN IP地址:HTTP和DNS的区别

3

传统上,我总是有一个别名/函数来方便地从CLI访问我的WAN IP:

$ type -a whatismyip 
whatismyip is a function
whatismyip () 
{ 
    curl ipv4.icanhazip.com
}

这个别名可能是很多年前创建的,可能使用了不同的域名,但始终使用HTTP。

最近我发现越来越多地参考了一个一行命令,通过DNS找到相同的信息。

但它真的一样吗?

在写这篇文章的时候,我正在使用4G网络共享,结果在协议之间有所不同。

更令人惊讶的是,它们也因DNS服务器而异。

而且有趣的是,ns1.google.com8.8.8.8的结果也不同。

$ whatismyip 
92.251.255.11

$ dig +short myip.opendns.com @resolver1.opendns.com
178.167.254.133

$ dig TXT +short o-o.myaddr.l.google.com @8.8.8.8
"74.125.73.77"
"edns0-client-subnet 178.167.255.120/32"

$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
"178.167.255.120"

$ ifconfig | grep 'inet addr:'
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet addr:192.168.42.125  Bcast:192.168.42.255  Mask:255.255.255.0
          inet addr:10.47.206.109  Bcast:10.63.255.255  Mask:255.192.0.0

有谁可以详细解释一下这个问题吗?:)
~~编辑:仅作澄清,我已经尝试了以上所有命令,并且它们提供了一致的结果。~~
~~编辑2:我最初忘记发布whatismyip的结果,但是没有任何DNS查询匹配HTTP查询。我正在尝试再次复制它,但是不成功。我必须回到那个咖啡厅:)~~
编辑3:我回去拿到了新数据。与上次一样一致!
1个回答

0

你所做的两个 DNS 查询:

$ dig +short myip.opendns.com @resolver1.opendns.com
$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com

应该返回相同的地址:您的外部IP地址。也许在您的请求之间,您的外部IP地址已经发生了变化,这就是为什么您得到了不同的结果。

这与DNS协议无关,而是一种技巧,由那些返回查询源IP地址的DNS服务器实现。这些和其他几个DNS技巧列在这篇文章中。

另一方面:

$ dig TXT +short o-o.myaddr.l.google.com @8.8.8.8

无法提供客户端IP,因为8.8.8.8不是o-o.myaddr.l.google.com的权威DNS服务器(ns1.google.com是),所以它不能直接获取您的IP地址,您看到的响应是DNS协议允许的最佳努力近似值(逐行描述):

  1. DNS解析器的IP地址,该解析器联系权威服务器以获取TXT记录。
  2. 如果可用,客户端(在本例中为您)的子网(edns-client-subnet),代表DNS解析器进行查询。

有关edns-client-subnet的更多详细信息,请阅读this article


我在问题中添加了澄清。我的外部IP没有改变。 - Stefanos Kalantzis
哪个DNS查询匹配HTTP IP? - argaz
HTTP协议的请求是否也来自于178.167.254/255子网? - argaz
不,它来自完全不同的地方。86.45.某事。 - Stefanos Kalantzis
这真的很奇怪,我的答案描述了我网络上的行为,这是一个典型的家庭网络,位于NAT后面。也许你的网络对不同的请求使用了某种代理。 - argaz
我回去了那里并获取了所有的细节。结果与上次一致 :) - Stefanos Kalantzis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接