命令行工具dig是解析域名和排查问题的利器。从主要功能上看,dig和nslookup并没有太大的区别,但是dig更像是nslookup的加强版,可以查询一些域名服务器管理的信息,在排查某些问题的时候很有用。总的来说,dig是一个易于使用且功能强大的命令行工具。(LCTT译注:dig和nslookup行为的主要区别在于dig使用的是操作系统本身的解析库,而nslookup使用的是程序自带的解析库,这有时会导致一些行为上的差异。另外,从性能上来说,dig返回的结果是BIND配置信息的格式,技术细节比较多。)dig最基本的功能是查询域名信息,所以它的名字其实是“域名信息查询工具DomainInformationGroper”的缩写。dig返回给用户的内容可以很详细也可以很简洁,显示内容的多少完全由用户查询时使用的选项决定。我只需要查询IP地址。如果我只需要查询某个域名指向的IP地址,可以使用+short选项:$digfacebook.com+short31.13.66.35查询时发现有些域名指向多个IP地址?这其实是网站提高易用性的一种措施。$dignetworkworld.com+short151.101.2.165151.101.66.165151.101.130.165151.101.194.165正是因为这些网站通过负载均衡实现了高可用,在接下来的查询中,你可能会发现这些IP地址的顺序不一样.(LCTT译注:浏览器等应用程序默认会使用第一个返回的IP地址,这样就实现了一个简单的负载均衡。)$dignetworkworld.com+short151.101.130.165151.101.194.165151.101.2.165151.101.66.165标准返回dig的标准返回内容包括工具本身的一些信息和请求域名服务器时返回的响应内容:$dignetworkworld.com;<<>>DiG9.11.5-P4-5.1ubuntu2.1-Ubuntu<<>*gt;networkworld.com;;全局选项:+cmd;;得到答案:;;->>HEADER<<-操作码:QUERY,状态:NOERROR,id:39932;;标志:qrrdra;查询:1,答案:4,权限:0,附加:1;;选择伪部分:;EDNS:版本:0,标志:;UDP:65494;;问题部分:;networkworld.com。在一个;;答案部分:networkworld.com。300在151.101.194.165networkworld.com。300在151.101.130.165networkworld.com。com。300INA151.101.2.165;;查询时间:108毫秒;;服务器:127.0.0.53#53(127.0.0.53);;时间:美国东部时间2020年2月13日星期四13:49:53;;MSGSIZErcvd:109由于域名服务器有缓存机制,返回的内容可能是之前缓存的信息。在这种情况下,dig显示的最后一个查询时间将为0毫秒(0毫秒):;;查询时间:0毫秒<==;;服务器:127.0.0.53#53(127.0.0.53);;时间:美国东部时间2020年2月13日星期四15:30:09;;MSGSIZErcvd:109问谁?默认情况下,dig会根据/etc/resolv.conf文件的内容来决定从哪个域名服务器获取查询结果。您还可以使用@为挖掘请求指定名称服务器。在下面的例子中,指定dig从谷歌的域名服务器8.8.8.8查询域名信息。$dig@8.8.8.8networkworld.com;<<>>DiG9.11.5-P4-5.1ubuntu2.1-Ubuntu<<>>@8.8.8.8networkworld.com;(找到1个服务器);;全局选项:+cmd;;得到答案:;;->>HEADER<<-操作码:QUERY,状态:NOERROR,id:21163;;标志:qrrdra;问题:1,答案:4,权限:0,附加:1;;选择伪部分:;EDNS:版本:0,标志:;UDP:512;;问题部分:;networkworld.com.INA;;答案部分:networkworld.com.299在151.101.130.165networkworld.com.299在151.101.66.165networkworld.com。299在151.101.194.165networkworld.com。299INA151.101.2.165;;查询时间:48毫秒;;服务器:8.8.8.8#53(8.8.8.8);;时间:美国东部时间2020年2月13日星期四14:26:14;;MSGSIZErcvd:109要了解正在使用的dig工具的版本,请使用-v选项。您将看到类似这样的内容:$dig-vDiG9.11.5-P4-5.1ubuntu2.1-Ubuntu或类似这样的内容:$dig-vDiG9.11.4-P2-RedHat-9.11.4-22.P2.el8如果你觉得dig返回的内容太详细,可以使用+noall(不显示所有内容)和+answer(只显示域名服务器的响应内容)选项,域名服务器的详细信息会被忽略,只保留域名解析结果。$dignetworkworld.com+noall+answer;<<>>DiG9.11.5-P4-5.1ubuntu2.1-Ubuntu<<>>networkworld.com+noall+answer;;全局选项:+cmdnetworkworld.com。300在151.101.194.165networkworld.com。300在151.101.130.165networkworld.com。300在151.101.66.165networkworld.com。300INA151.101.2.165批量查询域名如果要查询多个域名,可以将这些域名写入一个文件(domains),然后使用下面的dig命令遍历整个文件,给出所有的查询结果。$dig+noall+answer-fdomainsnetworkworld.com。300在151.101.66.165networkworld.com。300在151.101.2.165networkworld.com。300在151.101.130.165networkworld.com。std.com。77972在192.74.137.5uushenandoah.org。1982年在162.241.24.209amazon.com。18在176.32.103.205amazon.com。18在176.32.98.166amazon.com。也可以在上述命令中使用+short选项,但如果部分域名指向多个IP地址,将无法判断哪些IP地址对应哪些域名。在这种情况下,最好让awk处理返回内容,只留下第一列和最后一列:$dig+noall+answer-fdomains|awk'{print$1,$NF}'networkworld.com。151.101.66.165networkworld.com。151.101.130.165networkworld.com。151.101.194.165networkworld.com。151.101.2.165world.std.com。192.74.137.5amazon.com。176.32.98.166amazon.com。205.251。242.103amazon.com.176.32.103.205
