Nslookup是客户端用来与DNS SERVER进行相关操作的一个命令,这条命令几乎各类操作系统中都有提供它,可见其必要性.
今天好好分析了下这条命令.当作对DNS协议的复习.
Nslookup有两种模式,一种是非交互模式,一种是交互摸式,以下我的讨论全部在交换模式下进行.
直接在CMD下输入nslookup便进入了交互摸式,然后输入个 "?" 号,便可以看到帮助信息了,因该是英文的,不过还好微软的帮助是中文的~_~!.
先看看基本格式
NAME 打印主机信息/域名使用默认服务器
NAME1 NAME2 如上,但使用name2作为服务器 这两个是最基本用法第一个很好理解直接打个IP或者域名就是了
第二个就是以NAME1做为要解析的地址 然后用NAME2做为DNS服务器地址
如输入:bbs.verybat.cn 61.137.94.196
如果查询出来的信息下面还有"Non-authoritativeanswer"这么一行,表示查询的信息是从DNS缓存中获得的,没有就表示从受权服务器获得.我们对同一地址进行两次查询就可以看到这样的提示!
有些时候我们要查询的域名可能和我们NSLOOUP命令提供的参数一样,这个时候我们就必须要用"\"这个转意字符来使其进行转意.
如: \finger
server NAME 将默认服务器更改到指定的域名系统 (DNS) 域。以默认服务器查指定定DNS信息 lserver NAME 同上 以指定服务器查指定定DNS信息 finger [USER] 在默认服务器中查找用户帐号信息 server这个参数和lserver都是一样更该NSLOOKUP默认使用的DNS地址,在他们更改地址的时候都需要对更改的NAME进行一次DNS查询,这两个参数的不同之处就是在他们进行查询时使用的DNS不同
例如,当前NSLOOKUP默认DNS为61.137.94.196
那么我使用server 61.137.94.197 来改变默认DNS为61.137.94.197 时,会对61.137.94.197 进行一个PTR指针的查询,server命令就会用当前默认DNS61.137.94.196来进行查询,而如果改成 lserver 61.137.94.197 他就会用61.137.94.197这个要设置的DNS来进行PTR 的查询.
finger参数和UNIX的finger命令一样,都是查找指定帐号信息,不同的是他指定的要查找帐号的服务器地址就是默认DNS服务器的地址,而不能使用:finger 帐号@finger服务器地址 这样的格式,只能先用server或者lserver参数把默认DNS地址改掉,然后在输入:finger user 来进行查询.
ls [opt] DOMAIN [> FILE] 域名系统域的信息。
-d - 列出全部记录信息 -t TYPE - 列出指定记录信息 (e.g. A,CNAME,MX,NS,PTR etc.) view FILE 排序显示ls 输出文件的信息
ls命令其实就是一个区域复制命令,他能把DNS Server的指定区域信息全部Copy过来,前提是DNS Server支持任意IP进行区域复制,Windows的DNS Server默认就是允许任意IP进行区域复制的,这是一个非常不安全的配置,如果你的DNS同时能让内外网访问,而你又允许任意IP进行区域复制,那么攻击着可能根据区域信息获得你一些内部的网络信息. 看个例子:
server 202.98.96.68 '更改默认DNS
set type=any '获取任何记录信息
ls -d sccdptt.net.cn. '在 202.98.96.68 获取sccdptt.net.cn.域的全部信息.
输入完后我们便可以看到如下信息
sccdptt.net.cn. 86400 IN SOA ns.sccdptt.net.cn root.ns.scc
dptt.net.cn. (3051301 28800 7200 604800 86400) sccdptt.net.cn. 86400 IN NS ns.sccdptt.net.cn ...............................省略
www.sccdptt.net.cn. 86400 IN A 202.98.107.45 sccdptt.net.cn. 86400 IN SOA ns.sccdptt.net.cn root.ns.scc dptt.net.cn. (3051301 28800 7200 604800 86400) 这些信息便是放在202.98.96.68 这台DNS Server上sccdptt.net.cn. 区域文件内的源内容.
不用害怕,这里面不过是ISP提供的一些外网服务的DNS信息,没有ISP内部的任何信息,所以并没有太大影响.
这些信息打因出来比较乱,我们可以用
ls -d sccdptt.net.cn. > domain.txt '把内容输出到CMD当前目录下的domain.txt内
view domain.txt '对ls输出内容进行排序列.
这样信息就比较整齐了. (NSLOOKUP无法指定输出文件的具体位置,只能是当前CMD的目录)
root 将默认的服务器更改为域名系统 (DNS) 域名空间的根服务器。 这个很好理解就是把NSLOOKUP的默认DNS改为当前NSLOOKUP指定的根域名 Server的地址
直接输入root 这样就行了
要查看当前根域名 Server的地址就用set all
现在我们在来说说nslookup命令子参数最多的set 参数
set all 打印当前set 全部参数的值
set debug 启用调试模式。set nodebug 关闭调试模式。
set d2 启用详细调试模式。 set nod2 关闭详细调试模式。
debug 和 d2都是用来调试使用的但是如果只起用debug的话,那么我们只能看到DNS的响应报文,而看不到查询报文,要看查询报文把d2启用就可以了
例如 set debug '启用调试模式。(显示DNS响应报文信息)
set type=A '只查找A资源记录
set d2 启用详细调试模式。(显示DNS查询报文信息)
bbs.verybat.cn '查找 bbs.verybat.cn 的资源记录信息
就会出现如下信息.
------------
SendRequest(), len 32 'DNS查询报文 报文长度32byte HEADER: '头部信息 opcode = QUERY, id = 61, rcode = NOERROR '操作码=QUERY 标识=61 响应码= NOERROR header flags: query, want recursion '另外一些头部信息 查询响应码=query 希望递归=1
questions = 1, answers = 0, authority records = 0, additional=0 ' 问题数 回答数 授权回答数 额外信息
QUESTIONS: '查询问题
bbs.verybat.cn, type = A, class = IN 查询类型为A(WEB地址转IP地址) 查询类为IN (Internet) ------------ Got answer (129 bytes): '响应报文 128 byte HEADER: '如上 opcode = QUERY, id = 61, rcode = NOERROR header flags: response, want recursion, recursion avail. questions = 1, answers = 1, authority records = 2, additional = 2 QUESTIONS: '如上
bbs.verybat.cn, type = A, class = IN ANSWERS: '回答 -> bbs.verybat.cn type = A, class = IN, dlen = 4 'dlen为数据长度IP地址为4表示4字节 internet address = 221.130.193.157 '查询得到的bbs.verybat.cn IP ttl = 3600 (1 hour) ' 在本地可缓存多久 AUTHORITY RECORDS: '授权回答数 -> verybat.cn type = NS, class = IN, dlen = 19 nameserver = ns2.dnsfamily.com ttl = 3600 (1 hour) -> verybat.cn type = NS, class = IN, dlen = 6 nameserver = ns1.dnsfamily.com ttl = 3600 (1 hour) ADDITIONAL RECORDS: ' 额外信息 -> ns2.dnsfamily.com
type = A, class = IN, dlen = 4 internet address = 125.65.112.7 ttl = 88587 (1 day 36 mins 27 secs) -> ns1.dnsfamily.com type = A, class = IN, dlen = 4 internet address = 125.65.112.97 ttl = 22784 (6 hours 19 mins 44 secs) ------------
Non-authoritative answer: '是缓存中提取的 Name: bbs.verybat.cn Address: 221.130.193.157 这样就可以很清楚的看到DNS的查询响应过程,把上面的信息和DNS的基本查询响应报文对比一下就更加直观了.
DNS - 名字解析协议 [42/32] '查询报文
标识 0x003D [42/2] 代码和标志: 0000 0001 0000 0000 [44/2] 查询/响应 0... .... .... .... (查询) [44/1] 0x0080 操作码: .000 0... .... .... (标准查询) [44/1] 0x0078 权威回答: .... .0.. .... .... (没有) [44/1] 0x0004 截断 .... ..0. .... .... (没有) [44/1] 0x0002 希望递归: .... ...1 .... .... (有) [44/1] 0x0001 可用递归: .... .... 0... .... (没有) [45/1] 0x0080 广播 .... .... ...0 .... (数据包不是一个广播包) [45/1] 0x0010 响应码: .... .... .... 0000 (无错) [45/1] 0x000F 问题数: 1 [46/2] 答案数: 0 [48/2] 权威答案数: 0 [50/2] 附加答案数: 0 [52/2] 查询问题: [54/20] 域名: bbs.verybat.cn. [54/16] 类型: 1 (主机地址) [70/2] 类: 1 (因特网) [72/2] DNS - 名字解析协议 [42/129] '响应报文
标识 0x003D [42/2] 代码和标志: 1000 0001 1000 0000 [44/2] 查询/响应 1... .... .... .... (响应) [44/1] 0x0080 操作码: .000 0... .... .... (标准查询) [44/1] 0x0078 权威回答: .... .0.. .... .... (没有) [44/1] 0x0004 截断 .... ..0. .... .... (没有) [44/1] 0x0002 希望递归: .... ...1 .... .... (有) [44/1] 0x0001 可用递归: .... .... 1... .... (有) [45/1] 0x0080 广播 .... .... ...0 .... (数据包不是一个广播包) [45/1] 0x0010 响应码: .... .... .... 0000 (无错) [45/1] 0x000F 问题数: 1 [46/2] 答案数: 1 [48/2] 权威答案数: 2 [50/2] 附加答案数: 2 [52/2] 查询问题: [54/20] 域名: bbs.verybat.cn. [54/16] 类型: 1 (主机地址) [70/2] 类: 1 (因特网) [72/2] 答案: [74/16] 域名: bbs.verybat.cn. [54/16] 类型: 1 (主机地址) [76/2] 类: 1 (因特网) [78/2] 生存时间: 3600 [80/4] 数据长度: 4 [84/2] IP 地址 221.130.193.157 (bbs.verybat.cn) [86/4] 权威答案: [90/31] 域名: verybat.cn. [58/12] 类型: 2 (名字服务器记录) [92/2] 类: 1 (因特网) [94/2] 生存时间: 3600 [96/4] 数据长度: 19 [100/2] 名称: ns2.dnsfamily.com. [102/19] 权威答案: [121/18] 域名: verybat.cn. [58/12] 类型: 2 (名字服务器记录) [123/2] 类: 1 (因特网) [125/2] 生存时间: 3600 [127/4] 数据长度: 6 [131/2] 名称: ns1. [133/6] 附加答案: [139/16] 域名: ns2.dnsfamily.com. [102/19] 类型: 1 (主机地址) [141/2] 类: 1 (因特网) [143/2] 生存时间: 88587 [145/4] 数据长度: 4 [149/2] IP 地址 125.65.112.7 (ns2.dnsfamily.com) [151/4] 附加答案: [155/16] 域名: ns1.dnsfamily.com. [133/6] 类型: 1 (主机地址) [157/2] 类: 1 (因特网) [159/2] 生存时间: 22784 [161/4] 数据长度: 4 [165/2] IP 地址 125.65.112.97 (ns1.dnsfamily.com) [167/4] set recurse '使用递归查询 set norecurse '禁止使用递归查询,但不是遗代查询,因为我们是DNS Client,不能对响应报文中的DNS Server自动进行查询,除非用调试模式获取响应报文中返回的DNS地址手工进行.
至于禁止使用递归查询功能有什么作用,我目前知道的只有查看你指定DNS Server中有没有缓存指定WEB地址
例如: set norecurse '禁止使用递归查询
bbs.verybat.cn '查询这个WEB地址
如果没有打印出对应的IP则表示这个DNS中并没有缓存这个域名.
set root '设置NSLOOKUP的根服务器 可先用set all查看当前根服务器
如: set root=B.ROOT-SERVERS.NET
想要获取全部根服务器地址可以 随便输入一个不存在的顶级域名
如: snj.
这样就能看到全部的根服务器地址了,如果看不到用set debug 和set d2把调试全部打开就能看到了.
set retry=1 设置查询失败时,重新查询的次数,为1则表示重试一次. 重试的间隔时间和 timeout超时时间有关,如果在指定时段内没有收到对请求的答复,则超时时间加倍.每重发一次加一倍时间.
set timeout=2 '响应报文超时时间, 为2表示2秒
set type=X
set querytype=X '这两个都一样,都是设置要查询的资源类型. 如set type=PTR '设置查询的资源类型为PTR
221.130.193.157 '查找IP对应的域名
想看有多少资源类型请看:http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/c9e3b820-92bc-4cbc-8f8b-f0e898dc7009.mspx?mfr=true
set class=X '设置DNS查询报文段中的"类",这个一般都是IN(Internet)不需要更改
查看其他类请看:http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/f9be8c23-d692-4985-8878-7dc9b4bea65a.mspx
set msxfr '激活微软的快速域区传送方法 set nomsxfr '停止微软的快速域区传送方法
这个就是在使用ls进行区域传输时,是否用压缩报文方式进行传输,以加快传输速度.需要双方都支持才能有效果.
set ixfrver=X '设置执行增量传输(IXFR类型)时向服务器报告的版本号。
关于DNS区域增量传输请看:http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/940cdf9b-8e43-4b08-9a53-9fc215264403.mspx?mfr=true
剩下的domain srchlist search defname这四个子参数我再说明了,他们就是为了扩充NSLOOKUP命令本身的功能而设置,我不多说了,后面三个参数都是围绕domain的值来行动的. 各位可以用set domain=www.www.verybat.cn '设置自动填充域名后缀.
设置domain的值后,然后用set all查看srchlist 的值,在用search defname这两个开关进行打开和关闭操作对比查询一下,就清楚了.记得启用调试模式,不然很难看出效果.
|
nslookup
精选 转载上一篇:IOS的“第一条命令”
下一篇:设备标示

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章