2008年12月22日星期一

nslookup命令详解

Ping指令只是一个检查网络联通情况的命令,虽然在输入的参数是域名的情况下会通过DNS进行查询,但是它只能查询A类型和CNAME类型的记录,而且只会告诉你域名是否存在,其他的信息一概欠奉。


查询IP地址
nslookup最简单的用法就是查询域名对应的IP地址,包括A记录和CNAME记录,如果查到的是CNAME记录还会返回别名记录的设置情况。其用法是:
nslookup DomainName

C:\>nslookup www.oray.net
Server: cache-a.guangzhou.gd.cn
Address: 202.96.128.86

Non-authoritative answer:
Name: oray.net
Address: 222.73.49.101
Aliases: www.oray.net

如果目标域名是一个别名记录(CNAME),nslookup就开始显示出和ping命令不同的地方了,请看查询CNAME记录的结果。由于CNAME和A记录最后都是活的IP地址,所以一般情况下两者是等同看待的,命令的格式相同。
前两行显示这对应的域名和IP地址。最后显示的就是目标域名, 并注明Alias(别名)。


查询的域名不存在

C:\>nslookup aabbccdd.oray.net
Server: cache-a.guangzhou.gd.cn
Address: 202.96.128.86

Non-authoritative answer:
Name: aabbccdd.oray.net
Address: 59.37.71.85
对于不存在的域名,正常的返回结果应该是
*** UnKnown can't find aabbccdd.oray.net: Non-existent domain
上面的59.37.71.85是广州电信的ip地址,对于不存在的域名,电信会将他们指向几个固定的ip地址。由于电信域名服务器做域名劫持,所有不存在的域名都会解析到某个广告入口地址,因此能解析出来,而 nslookup 认为是正确的结果。

查询其他类型的域名

前面两个命令我们没有加任何参数,所以默认情况下nslookup查询的是A类型的记录。如果我们配置了其他类型的记录希望看到解释是否正常。这时候 ping就无能为力了。比如我们配置了MX记录,但是邮件服务器只能发信不能收信,到底是域名解释问题还是其他的问题Ping命令的检查只能让你误入歧 途。nslookup 这时候可以模拟你的其他遇见服务器进行域名解释的情况。我们需要在nslookup上加上适当的参数。指定查询记录类型的指令格式如下:

nslookup –qt=类型 DomainName

  注意qt必须小写。

  类型可以是一下字符,不区分大小写:

  A 地址记录(Ipv4)
  AAAA 地址记录(Ipv6)
  AFSDB Andrew文件系统数据库服务器记录
  ATMA ATM地址记录
  CNAME 别名记录
  HINFO 硬件配置记录,包括CPU、操作系统信息
  ISDN 域名对应的ISDN号码
  MB 存放指定邮箱的服务器
  MG 邮件组记录
  MINFO 邮件组和邮箱的信息记录
  MR 改名的邮箱记录
  MX 邮件服务器记录
  NS 名字服务器记录
  PTR 反向记录(从IP地址解释域名)
  RP 负责人记录
  RT 路由穿透记录(不懂)
  SRV TCP服务器信息记录(将有大用处)
  TXT 域名对应的文本信息
  X25 域名对应的X.25地址记录

看看www.oray.net的邮件服务器记录吧
C:\>nslookup -qt=mx www.oray.net
Server: cache-a.guangzhou.gd.cn
Address: 202.96.128.86

Non-authoritative answer:
www.oray.net canonical name = oray.net
oray.net MX preference = 11, mail exchanger = sendmail1.oray.net
oray.net MX preference = 20, mail exchanger = mail2.oray.net
oray.net MX preference = 30, mail exchanger = mail.oray.net
oray.net MX preference = 40, mail exchanger = sendmail.oray.net
oray.net MX preference = 50, mail exchanger = gzmail.oray.net
oray.net MX preference = 60, mail exchanger = sendmail2.oray.net
oray.net MX preference = 70, mail exchanger = sendmail3.oray.net
oray.net MX preference = 80, mail exchanger = sendmail4.oray.net
oray.net MX preference = 90, mail exchanger = sendmail5.oray.net

mail2.oray.net internet address = 202.105.21.217
mail.oray.net internet address = 61.152.96.115
sendmail.oray.net internet address = 202.105.21.193
sendmail.oray.net internet address = 61.152.96.116
sendmail2.oray.net internet address = 202.105.21.219
sendmail3.oray.net internet address = 61.152.96.117
sendmail4.oray.net internet address = 202.105.21.218
sendmail1.oray.net internet address = 58.211.16.88

看看,nslookup把服务器的名称和地址都给出来了,注意preference就是前面所说的优先级,该数值越小则优先级越高。

再看看名字服务器记录是怎么样的
C:\>nslookup -qt=ns www.oray.net
DNS request timed out.
timeout was 2 seconds.
*** Can't find server name for address 202.96.128.86: Timed out
*** Default servers are not available
Server: UnKnown
Address: 202.96.128.86

//这几行表示找不到202.96.128.86正确的反向记录

Non-authoritative answer:
www.oray.net canonical name = oray.net
oray.net nameserver = ns1.oray.net
oray.net nameserver = ns2.oray.net

ns2.oray.net internet address = 61.152.96.118
ns1.oray.net internet address = 202.105.21.217

看起来和MX记录的格式差不多,一般情况下服务器会同时返回对应的地址。不过也有不返回的情况。

在这里我希望大家注意一行显示“Non-authoritative answer:”,它的出现代表这个结果是从服务 器的缓存中得到的。所以提醒你这不是一个授权的答案。DNS服务器在查询过程中会缓存查询最终结 果,及名字服务器等中间结果。

指定使用的名字服务器
在默认情况下nslookup使用的是我们在本机TCP/IP配置中的DNS服务器进行查询,但有时候我们需要指定一个特定的服务器进行查询试验。这时候我们不需要更改本机的TCP/IP配置,只要在命令后面加上指定的服务器IP或者域名就可以了。这个参数在我们对一台指定服务器排错是非常必要的,另 外我们可以通过指定服务器直接查询授权服务器的结果避免其他服务器缓存的结果。命令格式如下:
nslookup [-qt=类型] DomainName 指定的DNS服务器IP或域名
C:\>nslookup -qt=ns www.oray.net a.gtld-servers.net
(root) nameserver = m.root-servers.net
(root) nameserver = d.root-servers.net
(root) nameserver = j.root-servers.net
(root) nameserver = f.root-servers.net
(root) nameserver = l.root-servers.net
(root) nameserver = e.root-servers.net
(root) nameserver = a.root-servers.net
(root) nameserver = b.root-servers.net
(root) nameserver = h.root-servers.net
(root) nameserver = k.root-servers.net
(root) nameserver = i.root-servers.net
(root) nameserver = c.root-servers.net
(root) nameserver = g.root-servers.net
m.root-servers.net internet address = 202.12.27.33
m.root-servers.net AAAA IPv6 address = 2001:dc3::35
d.root-servers.net internet address = 128.8.10.90
j.root-servers.net internet address = 192.58.128.30
j.root-servers.net AAAA IPv6 address = 2001:503:c27::2:30
f.root-servers.net internet address = 192.5.5.241
f.root-servers.net AAAA IPv6 address = 2001:500:2f::f
l.root-servers.net internet address = 199.7.83.42
l.root-servers.net AAAA IPv6 address = 2001:500:3::42
e.root-servers.net internet address = 192.203.230.10
a.root-servers.net internet address = 198.41.0.4
a.root-servers.net AAAA IPv6 address = 2001:503:ba3e::2:30
*** Can't find server name for address 192.5.6.30: No information
Server: UnKnown
Address: 192.5.6.30

oray.net nameserver = ns1.oray.net
oray.net nameserver = ns2.oray.net
ns1.oray.net internet address = 202.105.21.217
ns2.oray.net internet address = 61.152.96.118

这个命令直接从顶级域名服务器查询oray.net的NS记录。所有的二级域名的NS记录都存放在顶级域名服务器中,这是最权威的解释。注意这次没有非授权结果的提示。对于二级域名的NS记录查询来说这肯定是授权结果。顶级域名服务器的名称是a到j.gtld-servers.net共十台服务器。(gtld是Global Top Level Domain的缩写)。当我们修改域名的NS记录的时候可以通过上述查询知道修改的结果是不是已经在顶级域名服务器上生效。不过即使已经生效也可能不能正常解释,注意我在上一篇文章中提到的缓存时间的问题。


检查域名的缓存时间
nslookup –d[其他的参数] DomainName [指定的服务器地址]
C:\>nslookup -d www.baidu.com
DNS request timed out.
timeout was 2 seconds.
timeout (2 secs)
*** Can't find server name for address 202.96.128.86: Timed out
*** Default servers are not available
Server: UnKnown
Address: 202.96.128.86

------------
Got answer:
HEADER:
opcode = QUERY, id = 2, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 3, authority records = 0, additional = 0

QUESTIONS:
www.baidu.com, type = A, class = IN
ANSWERS:
-> www.baidu.com
canonical name = www.a.shifen.com
ttl = 291 (4 mins 51 secs)
-> www.a.shifen.com
internet address = 121.14.89.14
ttl = 359 (5 mins 59 secs)
-> www.a.shifen.com
internet address = 121.14.88.14
ttl = 359 (5 mins 59 secs)

------------
Non-authoritative answer:
Name: www.a.shifen.com
Addresses: 121.14.89.14, 121.14.88.14
Aliases: www.baidu.com

我们忽略其他的看看Got answer后面几行,包括了一个ttl数值。这个数值就是域名记录的生存时间。

标签:


评论: 发表评论

订阅 博文评论 [Atom]





<< 主页

This page is powered by Blogger. Isn't yours?

订阅 博文 [Atom]