为啥Yosemite下我ping的地址和nslookup出来的地址不一样

发布于 2022-08-30 01:01:27 字数 608 浏览 22 评论 0

国内的dns地址会被污染,这大家都知道,但我已经用了黑科技在局域网内代理了一个纯净的dns服务器,用nslookup命令来看工作良好

$ nslookup twitter.com
Server:     10.0.10.201
Address:    10.0.10.201#53

Non-authoritative answer:
Name:   twitter.com
Address: 199.59.149.230
Name:   twitter.com
Address: 199.59.150.7
Name:   twitter.com
Address: 199.59.148.10
Name:   twitter.com
Address: 199.59.148.82

但是用ping命令发现却到了一个污染地址

$ ping twitter.com
PING twitter.com (37.61.54.158): 56 data bytes
Request timeout for icmp_seq 0

我用的是内网的dns,要污染也不会这么强吧!而且在我的hosts文件里也没有配置任何相关的域名

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

静若繁花 2022-09-06 01:01:27

好吧,我知道答案了,顺便给问题加了个标签 yosemite ,大家也可以猜到这又是苹果干的好事了。我没有在问题中声明使用的系统非常不好

在新版的yosemite里,加入了一个discoveryd的进程来做网络发现,而且它也会缓存所有的dns查询记录,也就是所有与主机名相关的查询工作都会经过这样一个进程

图片描述

所以你的域名查询实际上是经过了缓存,但这个缓存有个特点

  1. pingdig等直接获取域名结果的命令会被缓存
  2. nslookup这类显式地从dns服务器获取结果的命令不会被缓存

而且我们可以用dig命令的查询时间来判断是否被缓存了,如果被缓存了,那么它的耗时肯定是0ms,比如下面的结果

$ dig twitter.com

; <<>> DiG 9.8.3-P1 <<>> twitter.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19734
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;twitter.com.           IN  A

;; ANSWER SECTION:
twitter.com.        28  IN  A   199.59.149.198
twitter.com.        28  IN  A   199.59.149.230
twitter.com.        28  IN  A   199.59.150.7
twitter.com.        28  IN  A   199.59.150.39

;; Query time: 0 msec
;; SERVER: 10.0.10.201#53(10.0.10.201)
;; WHEN: Thu Nov 27 15:00:05 2014
;; MSG SIZE  rcvd: 93

什么时候缓存会自动清除

  1. 根据资料上的记录,当你的dns服务器地址变更的时候,这些缓存会自动清除。比如你重新设置这里
  2. 当时间超过了域名的ttl限制后,这个域名就会被设置为过期

图片描述

为什么题主的缓存没有更新

因为我使用了局域网的一台服务器来代理其它的dns,为了解决污染,我把它代理的源地址从114.114.114.114切换到了8.8.8.8。但mac上的dns地址却没变过,都是这台代理服务器的地址,所以discoveryd不会清除缓存

强制清除所有的dns缓存

yosemite下,你可以输入

sudo discoveryutil mdnsflushcache;sudo discoveryutil udnsflushcaches
盗心人 2022-09-06 01:01:27

ping是用来测试主机是否可达的工具,并不适合测试DNS是否正常
ping的默认行为是调用系统API(大多数应用程序也是如此)进行查询,期间会涉及到

  • Windows
    • HOSTS file
    • search NetBIOS name cache
    • query WINS server
    • broadcast NetBIOS Name Query
    • search DNS client resolver cache
    • query DNS server
  • Unix
    • /etc/hosts
    • query NIS service
    • query DNS server

nslookup就简单多了,直接调用命令内置的dns客户端

  • 先查cache是否命中
  • 若无法命中,则直接查询系统配置的或者命令行指定的dns服务器
我喜欢麦丽素 2022-09-06 01:01:27

我也不懂,来贴下我的输出,等大婶解答。

$ nslookup twitter.com
Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
Name:   twitter.com
Address: 37.61.54.158

$ dig twitter.com

; <<>> DiG 9.9.2-P2 <<>> twitter.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12838
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;twitter.com.           IN  A

;; ANSWER SECTION:
twitter.com.        15476   IN  A   37.61.54.158

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Nov 27 14:29:39 2014
;; MSG SIZE  rcvd: 56

$ host twitter.com
twitter.com has address 37.61.54.158
twitter.com mail is handled by 20 alt1.aspmx.l.google.com.
twitter.com mail is handled by 30 ASPMX2.GOOGLEMAIL.com.
twitter.com mail is handled by 30 ASPMX3.GOOGLEMAIL.com.
twitter.com mail is handled by 20 alt2.aspmx.l.google.com.
twitter.com mail is handled by 10 aspmx.l.google.com.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文