传统上,我总是有一个别名/函数以便从 CLI 轻松访问我的 WAN IP:
$ type -a whatismyip
whatismyip is a function
whatismyip ()
{
curl ipv4.icanhazip.com
}
这个别名是多年前创建的,可能使用不同的域,但始终使用 HTTP。
最近发现引用one-liner的频率越来越高,都是通过DNS查找相同的信息。
但真的一样吗?
在撰写本文时,我使用的是 4G 网络共享,结果因协议(protocol)而异。
更令人惊讶的是,它们在 DNS 服务器之间也不同。
有趣的是,ns1.google.com
与 8.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
有没有人愿意详细解释一下 一些? :)
~~编辑:澄清一下,我在某种程度上尝试了上述所有命令,它们提供了一致的结果。~~
~~EDIT2:我最初忘记发布 whatismyip
结果,但没有一个 DNS 查询与 HTTP 匹配。我正在尝试重现它,但没有成功。我得回那个咖啡馆了:)~~
EDIT3:我回到那里并获得了新数据。和上次一样!
最佳答案
您进行的两次 DNS 查询:
$ dig +short myip.opendns.com @resolver1.opendns.com
$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com
应该返回相同的地址:您的外部 IP。也许您的外部 IP 在您的请求之间发生了变化,这就是您得到不同结果的原因。 它在任何方面都不是 DNS 协议(protocol)的一部分,而是那些 DNS 服务器使返回发起查询的 IP 成为可能的技巧。列出了这些和其他一些 DNS 技巧 in this post .
另一方面:
$ 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 协议(protocol)允许的最大努力近似值(逐行描述):
- 为
TXT
记录联系权威服务器的 DNS 解析器的 IP 地址。 - 如果可用,DNS 解析器代表其进行查询的客户端(在本例中为您)的子网 (edns-client-subnet)。
有关 edns-client-subnet
的更多详细信息,您可以阅读 this article .
关于linux - 获取广域网 IP : difference between HTTP and DNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36667355/