如何通过Get-DnsServerResourceRecord获取完整反向DNS主机名?
解决反向DNS区域导出完整主机名与RecordData的CSV方法
直接借助PowerShell结合DNS区域属性与记录字段就能快速处理,无需复杂的自定义反转函数,具体步骤和脚本如下:
- 遍历所有反向DNS区域,筛选出PTR类型的资源记录(反向区域核心记录类型)
- 通过区域名称提取IP前缀,结合记录的HostName拼接出完整IP地址
- 直接读取PTR记录的
RecordData.PtrDomainName字段作为完整主机名
以下是可直接运行的脚本:
# 获取所有主类型的反向DNS区域 $reverseZones = Get-DnsServerZone | Where-Object { $_.ZoneType -eq 'Primary' -and $_.IsReverseLookupZone -eq $true } # 初始化结果存储数组 $dnsRecords = @() foreach ($zone in $reverseZones) { # 剥离区域名称的arpa后缀,提取IP前缀部分 $zonePrefix = $zone.ZoneName -replace '\.in-addr\.arpa$|\.ip6\.arpa$', '' # 处理IPv4反向区域:反转前缀段得到IP的前几位 if ($zone.ZoneName -match '\.in-addr\.arpa$') { $ipPrefixParts = $zonePrefix.Split('.') | Reverse $ipPrefix = $ipPrefixParts -join '.' } else { # IPv6反向区域前缀直接保留(如需完整IPv6地址可扩展逻辑) $ipPrefix = $zonePrefix } # 获取当前区域内所有PTR记录 $records = Get-DnsServerResourceRecord -ZoneName $zone.ZoneName -RRType PTR foreach ($record in $records) { # 拼接完整IP地址 $fullIp = if ($zone.ZoneName -match '\.in-addr\.arpa$') { "$ipPrefix.$($record.HostName)" } else { "$($record.HostName).$zonePrefix" } # 构造记录对象 $dnsRecord = [PSCustomObject]@{ FullIPAddress = $fullIp FullHostName = $record.RecordData.PtrDomainName RecordData = $record.RecordData.ToString() SourceZone = $zone.ZoneName } $dnsRecords += $dnsRecord } } # 导出到CSV文件 $dnsRecords | Export-Csv -Path 'ReverseDNS_FullRecords.csv' -NoTypeInformation -Encoding UTF8
关键说明:
- 反向区域名称本身包含了IP段的前缀信息(比如
192.168.1.in-addr.arpa对应192.168.1.x网段),拆分反转后即可与记录的HostName拼接成完整IP - PTR记录的
PtrDomainName字段就是对应的完整主机名,之前解析无效大概率是因为未筛选PTR类型记录,误处理了其他类型记录 - 脚本同时兼容IPv4和IPv6反向区域,IPv6的完整地址拼接逻辑可根据实际需求进一步扩展
内容的提问来源于stack exchange,提问作者L. Landgraf
相关产品推荐
相关产品推荐

