从 powershell,我可以运行 Get-DnsServerResourceRecord -zonename “test.com” 来获取区域中的所有记录。
我可以将所有区域加载到一个变量中,并使用 for 循环获取所有区域中的所有记录。
我想要的是所有区域的所有记录,其中包含 CIDR 范围内的 IP 地址。
示例:我想要所有区域中值为 10.10.10.1/24 的所有记录。希望返回包含区域、记录类型、记录名称和值,例如 temp.com、A 记录、www、10.10.10.10 test.org、cname、host1、10.10.10.25 等
最佳答案
1
首先要注意的是,查询 DNS 时,每种类型的 DNS 记录都有不同的属性要查询,因此无法只查询与“mydomain.foo”匹配的任何记录并返回可能具有该字符串的所有 CNAME、MX、TXT、NS 记录。因此,下面的查询专门用于在 A 记录中查找 IPv4 地址。
由于您正在搜索 /24,最简单的选项就是搜索前 3 个八位字节。所以:
$searchIP="10.10.10."
$zonelist=get-dnsserverzone
ForEach ($zone in $zonelist)
{
get-dnsserverresourcerecord -zonename $Zone.zonename |
Where-Object {$_.RecordData.ipv4address -match $searchIP} |
select @{N="ZoneName";E={$Zone.zonename}},HostName,RecordType,@{N="IPv4 Address";E={$_.RecordData.ipv4address}} |
Format-Table
}
您可以通过一些字符串争论来搜索 /24 的子集,但由于 IP 地址是字符串而不是数字,因此变得复杂。
注意,查询位本身是:
Where-Object {$_.RecordData.ipv4address -match $searchIP}
其中关键要素是:
RecordData.ipv4address
您也可以使用其中的其他属性类似地查询其他记录类型RecordData
,例如:
RecordData.HostNameAlias
RecordData.MailExchange
RecordData.DomainName
RecordData.DescriptiveText
RecordData.PrimaryServer
RecordData.NameServer
RecordData.IPv6Address
RecordData.PtrDomainName
|
|