首先看下window CMD中 nslookup /?返回的帮助结果,这个结果#解释中,第二条和第四条的server代表不同含义 要注意。
C:\Users\HLGF>nslookup /?
用法:
nslookup [-opt ...] # 使用默认服务器的交互模式
nslookup [-opt ...] - server # 使用 "server"的交互模式 server(代表就是被查的域名或者IP)举例 nslooup [参数] - baidu.com 就开启了nslookup baidu.com的交互式模式。
nslookup [-opt ...] host # 仅查找使用默认服务器的 "host" 不手动指定 DNS 服务器,直接使用本机系统默认 DNS 去查询 host(代表被查的域名和IP)
nslookup [-opt ...] host server # 仅查找使用 "server" 的 "host" 指定server(DNS服务器地址),查询host(代表被查的域名和IP)
nslookup有两种运行模式
非交互模式
nslookup [-opt ...] 被查询的目标域名/ip [指定的DNS] #[-opt ...]代表可以多个参数可以连写,两参数之间可以用空格隔开
举例# 开启调试 + 查询TXT记录 + 超时3秒,阿里DNS
nslookup -debug -type=TXT -timeout=3 baidu.com 223.5.5.5
[-opt] 列表和含义 这些是CMD 命令行选项,不是交互式 set 子命令(虽然很多功能一一对应,但写法不一样)
| 命令行选项 | 等价交互式 set | 说明 |
|---|---|---|
| -type=XXX | set type=XXX | 指定记录类型 (A/AAAA/MX/TXT/NS/SOA/CNAME/PTR),别名 -querytype= SPF主域名的 TXT规定哪些 IP 可以代这个域名发邮件,防冒充DKIMxxx._domainkey子域名 TXT邮件签名,防止邮件内容被篡改域名验证子域名 TXT给服务商证明:你拥有这个域名 查询TXT时会显示乱码 在 CMD中先chcp 65001 命令改变字符集为UTF-8 |
| -querytype=XXX | set q=XXX | 和 -type 完全一样,只是别名 |
| -timeout=N | set timeout=N | 超时时间,单位秒 |
| -vc | set vc | Virtual Circuit,强制 TCP53 查询默认情况(不写 - vc)DNS 默认走 UDP 53。UDP 轻量、速度快,但有报文长度限制:512 字节。如果 DNS 返回的结果比较长(比如多条 TXT、DKIM、大量 NS 记录),UDP 包装不下,服务器会截断应答。截断之后,nslookup 收到不完整数据,查询失败。 |
| -norecurse | set norecurse | 关闭递归查询 误区:-norecurse 不能把递归 DNS 变成权威 DNS。-norecurse只是报文里的一个标志位,只是告诉对方 “不要帮我继续迭代查询”,不代表拿到权威结果。例子nslookup -type=NS -norecurse qq.com目标服务器:本机递归 DNS (172.21.1.143) → 从缓存返回 → 非权威应答 例子2nslookup -type=NS -norecurse qq.com ns1.qq.com目标服务器:ns1.qq.com(qq 的权威 DNS)→ 服务器本身持有原始记录 → 权威应答 |
| -recurse | set recurse | 开启递归(默认开启,一般不用写)递归就是你把查询发给 DNS 服务器,让这台 DNS 服务器帮你把整个域名解析全程搞定。如果它自己不知道答案,它会替你去问根服务器、顶级域服务器、权威服务器,拿到最终结果再返回给你。- norecurse,关闭递归)你告诉 DNS 服务器:你只需要返回你自己知道的信息,不要帮我继续往下查。如果这台服务器没有该域名的最终解析结果,它只会返回下一级 DNS 服务器地址,不再继续替你迭代查询。 |
| -port=N | set port=N | 指定 DNS 端口,默认 53 |
| -debug | set debug | 开启简易调试,查看查询交互 |
| -d2 | set d2 | 最高级调试,打印完整 DNS 报文 |
| -domain=xxx | set domain=xxx | 设置默认搜索域 范例nslookup -domain=test.local server01 192.168.1.1 再一个范例nslookup -domain=baidu.com www |
|
| -srchlist=d1;d2 | set srchlist=d1;d2 | 多个域名搜索域,分号分隔 范例nslookup -srchlist=test.local;lab.local server01 192.168.1.1 |
| -nosrch | set nosrch | 关闭域名后缀自动追加(不使用搜索域) |
| -class=IN | set class=IN | DNS 类别,默认 IN (互联网),几乎不用改 |
举例
nslookup -type=TXT -timeout=3 -vc baidu.com 223.5.5.5
参数拆解
-type=TXT:查询 TXT 文本记录(用来查 SPF/DKIM 邮件防伪造记录)-timeout=3:DNS 查询超时时间 3 秒,3 秒没收到应答就判定超时-vc:Virtual Circuit,强制使用 TCP 53 端口查询(UDP 报文太长会截断,TXT/DKIM 长记录常用)baidu.com:host,要查询的目标域名223.5.5.5:server,指定使用阿里公共 DNS 服务器,不用本机网卡默认 DNS
解读解释:
服务器: 223.5.5.5
Address: 223.5.5.5
非权威应答:
baidu.com text = "v=spf1 include:spf.baidu.com -all"
上面的范例用交互模式等价于
nslookup
server 223.5.5.5
set type=TXT
set timeout=3
set vc
baidu.com
exit
nslookup交互式模式
这些不能放在 nslookup [-opt ...] 里面当命令行参数!只能在>里面用:
set retry=N重试次数(没有-retry命令行参数!)set root设置根服务器set nodebug/set nod2关闭调试set all查看当前全部配置
直接在 CMD / PowerShell 输入 nslookup,后面不加任何域名、IP,回车 进入交互式模式
交互式核心命令分为两大类
-
set 子命令:用来修改本次会话的查询配置(等价于非交互的
-opt) -
操作命令:切换 DNS 服务器、查看配置、退出等
-
直接输入域名 / IP:发起 DNS 查询
注意:交互里面不能写-type、-timeout,要用set xxx -
set 系列(配置参数,最重要)
| 交互命令 | 含义 | 等价非交互选项 |
|---|---|---|
| set type=A | 设置查询记录类型 A(IPv4) | -type=A |
| set type=MX | MX 邮件记录 | -type=MX |
| set type=TXT | TXT 文本记录 (SPF/DKIM) | -type=TXT |
| set type=NS | 域名权威 NS 服务器 | -type=NS |
| set type=AAAA | IPv6 记录 | -type=AAAA |
| set type=CNAME | 别名记录 | -type=CNAME |
| set timeout=3 | 超时 3 秒 | -timeout=3 |
| set vc | 开启 TCP 查询(vc=virtual circuit) | -vc |
| set novc | 关闭 TCP,切回 UDP(默认) | — |
| set recurse | 开启递归查询(默认) | -recurse |
| set norecurse | 关闭递归查询 | -norecurse |
| set port=53 | 修改 DNS 端口 | -port |
| set debug | 简易调试,查看查询过程 | -debug |
| set d2 | 完整 DNS 报文调试(输出巨多) | -d2 |
| set nodebug | 关闭 debug | — |
| set nod2 | 关闭 d2 | — |
| set retry=3 | 查询重试 3 次 | ❗非交互没有这个参数!只有交互才有 |
| set all | 查看当前会话全部配置(非常实用) | — |
| set nosrch | 关闭域名后缀自动补全 | -nosrch |
server <DNSIP/域名> #切换当前会话使用的 DNS 服务器,后续所有查询都用这台 DNS 举例 > server 223.5.5.5 用223.5.5.5DNS服务器
lserver
区别:server 会用当前已经选定的 DNS解析新服务器域名;lserver 永远用本机初始 DNS 解析。内网排错偶尔用。
exit
退出 nslookup 交互模式,回到 CMD/PowerShell。
help或者?
在
>提示符查看帮助。
举例
nslookup
server 223.5.5.5
set type=MX
baidu.com
结果
服务器: 223.5.5.5
Address: 223.5.5.5
非权威应答:
baidu.com MX preference = 20, mail exchanger = mx.baidu.com
baidu.com MX preference = 10, mail exchanger = mx.baidu.com
server 223.5.5.5:本次会话全部查询交给阿里 DNSset type=MX:后续所有查询默认查 MX 邮件记录,不用每次重复写baidu.com:发起查询preference=数字:优先级,数字越小邮件服务器优先使用
只要不退出,继续输入别的域名,仍然查 MX 记录,直到你
set type=A改回去。
举例2set all 查看当前全部配置
set all
解释:会打印当前所有参数:超时、重试次数、是否递归、是否开启 vc、查询类型、搜索域等。
排查的时候,先
set all,确认当前 nslookup 的参数是不是你预期的
Resolve-DnsName 完整学习(PowerShell 原生 Cmdlet)
Resolve-DnsName 是 PowerShell 自带的 DNS 查询命令,输出是对象,不是纯文本;参数是命名参数,参数顺序不受限制,脚本友好。
Resolve-DnsName [-Name]
[[-Timeout]
[-Name]:要查询的域名 / IP,位置参数,可以省略 - Name 直接写域名- 所有参数都是命名参数,顺序随便放,这是和 nslookup 最大区别!
nslookup:选项必须放最前面,host/server 是位置参数
Resolve-DnsName:参数随便前后摆,靠-参数名识别
Resolve-DnsName 支持多个 DNS 服务器,-Server 223.5.5.5,8.8.8.8,依次尝试。nslookup 一次只能指定一台 DNS。
| Resolve-DnsName 参数 | 作用 | nslookup 对应 |
|---|---|---|
| -Name | 目标域名 / IP(位置参数) 默认命令后第一个参数就是给它的可以省略直接写被查询域名/IP 但是如果“-Name 域名/IP” 就可以随便放在命令后哪个位置 | host |
| -Type | DNS 记录类型:A/AAAA/MX/TXT/NS/SOA/CNAME/PTR | -type= |
| -Server | 指定 DNS 服务器,可以写多个,逗号分隔 | 末尾位置参数 server |
| -Timeout | 超时时间(秒) | -timeout |
| -TcpOnly | 强制 TCP53 查询 | -vc |
| -Port | 指定 DNS 端口 | -port |
| -DnsOnly | 仅 DNS 解析,不使用 NetBIOS 等其他名称解析 | -norecurse 不是完全等价 |
| -NoRecursion | 关闭递归查询 | -norecurse |
| -Debug | 开启调试输出 | -debug |
范例: 基础 A 记录查询,使用本机默认 DNS
Resolve-DnsName baidu.com -Type A #1. baidu.com:-Name,查询目标域名(位置参数,省略 - Name)-Type A:查询 A 记录(IPv4)
输出:
Name Type TTL Section IPAddress
baidu.com A 120 Answer 180.101.49.11
baidu.com A 120 Answer 180.101.49.12
解读
解读:
- Name:记录名称
- Type:记录类型 A
- TTL:120 秒,DNS 缓存存活时间
- Section=Answer:应答段,就是查询结果
- IPAddress:域名对应的 IPv4 地址
优势:返回对象,直接管道提取 IP
如果只要去取IP
只取出IP地址
(Resolve-DnsName baidu.com -Type A).IPAddress
范例2 指定 DNS 服务器,查询 MX 邮件记录
Resolve-DnsName baidu.com -Type MX -Server 223.5.5.5
baidu.com:查询域名-Type MX:查询 MX 邮件交换记录-Server 223.5.5.5:指定使用阿里 DNS 服务器
输出样例:
Name Type TTL Section NameExchange Preference
baidu.com MX 3600 Answer mx.baidu.com 10
baidu.com MX 3600 Answer mx.baidu.com 20
- NameExchange:邮件服务器域名
- Preference:优先级,数字越小优先投递
范例3 多参数组合:TXT 记录 + 超时 3 秒 + 强制 TCP + 指定 DNS
Resolve-DnsName baidu.com -Type TXT -Timeout 3 -TcpOnly -Server 223.5.5.5
baidu.com:目标域名-Type TXT:查询 TXT 记录(SPF/DKIM)-Timeout 3:超时 3 秒-TcpOnly:强制 TCP 53 查询(等价 nslookup -vc)-Server 223.5.5.5使用阿里 DNS
输出样例
Name Type TTL Section Strings
baidu.com TXT 3600 Answer {v=spf1 include:spf.baidu.com -all}
解读:
Strings 属性存放 TXT 的文本内容;多条 TXT 记录会放在数组里。
范例 4:关闭递归查询,直接查询权威 NS 服务器,AAAA IPv6 记录
Resolve-DnsName baidu.com -Type AAAA -NoRecursion -Server ns.baidu.com
参数拆解
baidu.com:域名-Type AAAA:IPv6 记录-NoRecursion:关闭递归查询,等价 nslookup-norecurse-Server ns.baidu.com指定 baidu 权威 DNS 服务器
此时拿到权威应答,和 nslookup -norecurse 效果一致。
示例 5:反向解析 PTR(IP 反查域名)
Resolve-DnsName 180.101.49.11 -Type PTR -Server 223.5.5.5 -Timeout 2
参数拆解
180.101.49.11:要反向查询的 IP-Type PTR:PTR 反向记录-Server 223.5.5.5:阿里 DNS-Timeout 2:超时 2 秒
很多公网 IP 没有 PTR 记录,会抛出 DNS 查询失败异常,脚本要用 try/catch 捕获。
示例 6:多个 DNS 服务器备选,查询 NS 记录
Resolve-DnsName baidu.com -Type NS -Server 223.5.5.5,8.8.8.8
参数拆解
-Type NS查询域名权威 NS 服务器-Server 223.5.5.5,8.8.8.8给两个 DNS,第一个不通自动尝试第二个
nslookup 一次只能指定一台 DNS,这个是 Resolve-DnsName 的优势!
示例 7:管道筛选输出(最核心优势,nslookup 很难做到)
Resolve-DnsName baidu.com -Type A -Server 223.5.5.5 | Select-Object Name,IPAddress,TTL
Select-Object:挑选想要的属性,只输出 Name、IPAddress、TTL
输出:
Name IPAddress TTL
baidu.com 180.101.49.11 120
baidu.com 180.101.49.12 120
posted on
浙公网安备 33010602011771号