如何使用dig命令挖掘域名解析信息
命令行工具 dig 是用于解析域名和故障排查的一个利器。
从主要功能上来说,dig 和 nslookup 之间差异不大,但 dig 更像一个加强版的 nslookup,可以查询到一些由域名服务器管理的信息,这在排查某些问题的时候非常有用。总的来说,dig 是一个既简单易用又功能强大的命令行工具。(LCTT 译注:dig 和 nslookup 行为的主要区别来自于 dig 使用是是操作系统本身的解析库,而 nslookup 使用的是该程序自带的解析库,这有时候会带来一些行为差异。此外,从表现形式上看,dig 返回是结果是以 BIND 配置信息的格式返回的,也带有更多的技术细节。)
dig 最基本的功能就是查询域名信息,因此它的名称实际上是“域名信息查询工具Domain Information Groper”的缩写。dig 向用户返回的内容可以非常详尽,也可以非常简洁,展现内容的多少完全由用户在查询时使用的选项来决定。
我只需要查询 IP 地址
如果只需要查询某个域名指向的 IP 地址,可以使用 +short 选项:
$ dig facebook.com +short
31.13.66.35
在查询的时候发现有的域名会指向多个 IP 地址?这其实是网站提高其可用性的一种措施。
$ dig networkworld.com +short
151.101.2.165
151.101.66.165
151.101.130.165
151.101.194.165
也正是由于这些网站通过负载均衡实现高可用,在下一次查询的时候,或许会发现这几个 IP 地址的排序有所不同。(LCTT 译注:浏览器等应用默认会使用返回的第一个 IP 地址,因此这样实现了一种简单的负载均衡。)
$ dig networkworld.com +short
151.101.130.165
151.101.194.165
151.101.2.165
151.101.66.165
标准返回
dig 的标准返回内容则包括这个工具本身的一些信息,以及请求域名服务器时返回的响应内容:
$ dig networkworld.com
; <<>> DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu <<>*gt; networkworld.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39932
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;networkworld.com. IN A
;; ANSWER SECTION:
networkworld.com. 300 IN A 151.101.194.165
networkworld.com. 300 IN A 151.101.130.165
networkworld.com. 300 IN A 151.101.66.165
networkworld.com. 300 IN A 151.101.2.165
;; Query time: 108 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Thu Feb 13 13:49:53 EST 2020
;; MSG SIZE rcvd: 109
由于域名服务器有缓存机制,返回的内容可能是之前缓存好的信息。在这种情况下,dig 最后显示的查询时间Query time会是 0 毫秒(0 msec):
;; Query time: 0 msec <==
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Thu Feb 13 15:30:09 EST 2020
;; MSG SIZE rcvd: 109
向谁查询?
在默认情况下,dig 会根据 /etc/resolv.conf 这个文件的内容决定向哪个域名服务器获取查询结果。你也可以使用 @ 来指定 dig 请求的域名服务器。
在下面的例子中,就指定了 dig 向 Google 的域名服务器 8.8.8.8 查询域名信息。
$ dig @8.8.8.8 networkworld.com
; <<>> DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu <<>> @8.8.8.8 networkworld.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21163
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;networkworld.com. IN A
;; ANSWER SECTION:
networkworld.com. 299 IN A 151.101.130.165
networkworld.com. 299 IN A 151.101.66.165
networkworld.com. 299 IN A 151.101.194.165
networkworld.com. 299 IN A 151.101.2.165
;; Query time: 48 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Feb 13 14:26:14 EST 2020
;; MSG SIZE rcvd: 109
想要知道正在使用的 dig 工具的版本,可以使用 -v 选项。你会看到类似这样:
$ dig -v
DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu
或者这样的返回信息:
$ dig -v
DiG 9.11.4-P2-RedHat-9.11.4-22.P2.el8
如果你觉得 dig 返回的内容过于详细,可以使用 +noall(不显示所有内容)和 +answer(仅显示域名服务器的响应内容)选项,域名服务器的详细信息就会被忽略,只保留域名解析结果
$ dig networkworld.com +noall +answer
; <<>> DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu <<>> networkworld.com +noall +answer
;; global options: +cmd
networkworld.com. 300 IN A 151.101.194.165
networkworld.com. 300 IN A 151.101.130.165
networkworld.com. 300 IN A 151.101.66.165
networkworld.com. 300 IN A 151.101.2.165
批量查询域名
如果你要查询多个域名,可以把这些域名写入到一个文件内(domains),然后使用下面的 dig 命令遍历整个文件并给出所有查询结果。
$ dig +noall +answer -f domains
networkworld.com. 300 IN A 151.101.66.165
networkworld.com. 300 IN A 151.101.2.165
networkworld.com. 300 IN A 151.101.130.165
networkworld.com. 300 IN A 151.101.194.165
world.std.com. 77972 IN A 192.74.137.5
uushenandoah.org. 1982 IN A 162.241.24.209
amazon.com. 18 IN A 176.32.103.205
amazon.com. 18 IN A 176.32.98.166
amazon.com. 18 IN A 205.251.242.103
你也可以在上面的命令中使用 +short 选项,但如果其中有些域名指向多个 IP 地址,就无法看出哪些 IP 地址对应哪个域名了。在这种情况下,更好地做法应该是让 awk 对返回内容进行处理,只留下第一列和最后一列:
$ dig +noall +answer -f domains | awk '{print $1,$NF}'
networkworld.com. 151.101.66.165
networkworld.com. 151.101.130.165
networkworld.com. 151.101.194.165
networkworld.com. 151.101.2.165
world.std.com. 192.74.137.5
amazon.com. 176.32.98.166
amazon.com. 205.251.242.103
amazon.com. 176.32.103.205
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
11天,他们为湖北4亿只家禽和1692万头猪“续命”
1 李永宁再也不担心家里100来头猪会饿死了。 往年春节期间,生猪可是抢手货。更何况,2019年下半年后,猪肉价格一路高企。哪曾想,疫情不期而至。一夜之间,生猪没了销路。 作为湖北省十堰市土城镇的养猪大户,李永宁欲哭无泪。资金一断,连饲料都成了问题,只能眼瞅那些猪嗷嗷待哺。 “再筹不到钱,猪就要断粮了!”他急得没了主意。 他不是没想过去贷款,只是特殊时期,银行网点全关了。他试过打电话,客服没有接通。 无奈之下,李永宁半信半疑地登陆湖北农信小程序,尝试线上借贷。 “您好,有什么可以为您服务?” 这一次,他终于等来了回应。 2 其实有人比李永宁还急。 早在2月26日,湖北省农信联社(湖北农信)就联合阿里云一起,争分夺秒开发云营业厅。 疫情肆虐,湖北严控,武汉封城,停工停学,银行自然也不例外。 湖北农信辖内的2100多个网点停止营业。这些网点分布在湖北省内的村村镇镇,主要面向李永宁这样的农户和小微企业主。 而他们抗风险能力最差,正是本次疫情中最脆弱的群体。不像一般公司有充沛的资金储备,大部分农户和小微企业主都指望在春节把自家的农副产品销出去,快速回笼资金。 疫情让一切都成了泡影。尤其是像李永...
- 下一篇
【Android】EventReminder使用教程(日历事件导出封装库)
【Android】EventReminder使用教程(日历事件导出封装库) 为啥要写这个库呢? 尝试自己写一个库调用,学习一下这个流程,为以后做准备日历库在网上的资料太少了,而这个功能却又很实用自己做的项目都会涉及到事件导出功能,不想重复写代码这个库目前可以支持日历事件的直接导出、删除,ics文件的生成 ics生成文件中支持重复规则 目前该库还在完善中🔨 欢迎提供建议❤ 2|0使用方法 2|1引入 在项目中引用即可 implementation 'com.paul.eventreminder:eventreminder:0.0.3'2|2使用教程 CalendarManager不是特别方便的初始化方法: 你需要提供Activity(用来获取权限)以及日历账户配置名称 首先声明一个Manager: CalendarManager calendarManager=new CalendarManager(this,"测试");会自动请求日历写入权限,如果拒绝这一块逻辑我没有处理,你可以在自己的代码中去实现该逻辑。 添加一个事件的时候你需要创建一个CalendarEvent 对象,或者您也可...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群