如何获取网络中指向不同DNS服务器的工作站列表?
查找网络中使用非指定DNS服务器的工作站方法
Windows环境命令行方案
- 域内批量查询:用PowerShell结合AD模块和WMI,遍历域内所有计算机并检查DNS配置,脚本示例:
Get-ADComputer -Filter * | ForEach-Object { try { $dnsServers = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName $_.Name -Filter "IPEnabled='True'" | Select-Object -ExpandProperty DNSServerSearchOrder # 替换为你的标准DNS地址 $standardDns = @("10.0.0.5", "10.0.0.6") $nonStandard = $dnsServers | Where-Object { $_ -notin $standardDns } if ($nonStandard) { Write-Output "$($_.Name) 使用非标准DNS: $($nonStandard -join ', ')" } } catch { Write-Warning "无法访问 $($_.Name): $_" } }
执行前需确保已安装AD模块,且账号拥有域工作站的WMI访问权限。
- 单台主机验证:在目标机器上直接执行命令查看当前DNS配置:
ipconfig /all | findstr /i "dns servers"
Linux/Unix环境命令行方案
- 批量SSH查询:编写Shell脚本批量登录主机,检查
/etc/resolv.conf中的DNS配置:
#!/bin/bash # 存放目标主机列表的文件,每行一个主机名/IP HOST_LIST="target_hosts.txt" # 替换为你的标准DNS地址 STANDARD_DNS=("192.168.2.10" "192.168.2.11") while read host; do # 远程获取DNS服务器列表 remote_dns=$(ssh -q $host "grep 'nameserver' /etc/resolv.conf | awk '{print \$2}'") # 检查是否包含标准DNS has_standard=0 for dns in $remote_dns; do if [[ " ${STANDARD_DNS[@]} " =~ " $dns " ]]; then has_standard=1 break fi done if [ $has_standard -eq 0 ]; then echo "$host 使用非标准DNS: $remote_dns" fi done < $HOST_LIST
需提前配置SSH免密登录,避免每次输入密码。
专用工具方案
- SolarWinds IPAM:可扫描整个网络的设备配置,自动识别使用非指定DNS的工作站,支持生成并导出详细报表。
- Lansweeper:通过网络资产扫描收集所有设备的DNS配置信息,可自定义筛选规则快速定位不合规主机。
- Nmap:使用内置脚本扫描网段内设备的DNS服务器信息:
nmap -sn --script dns-server-discover 192.168.1.0/24
扫描完成后,可从结果中筛选出与标准DNS不符的主机。
内容的提问来源于stack exchange,提问作者JDeLeon




