传统上,我总是使用别名/功能来从CLI轻松访问我的WAN IP:
$ type -a whatismyip
whatismyip is a function
whatismyip ()
{
curl ipv4.icanhazip.com
}
该别名是多年前创建的,可能使用其他域,但始终使用HTTP。
最近,我发现越来越多的人引用一线式网络,它通过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地址。 有关
edns-client-subnet
的更多详细信息,您可以阅读this article。