gpt4 book ai didi

powershell - 生成指定子网中所有DNS记录的列表

转载 作者:行者123 更新时间:2023-12-03 00:02:14 25 4
gpt4 key购买 nike

我需要为指定子网生成所有DNS记录的列表。有没有办法使用Powershell DNS cmdlet,DNSCMD或其他任何方法来做到这一点,这不是我目前正在使用的非常慢的方法吗?

我在17.(7,8,9).162.(16-238)中枚举了主机名。

$HostList = @()

ForEach ($a in 7..9) {
ForEach ($b in 16..238) {
$DNSCheck = Resolve-DNSName "17.$a.162.$b"
$HostList += ($DNSCheck.NameHost)
}
}

Write-Host $HostList

我最终使用的东西-非常感谢Ansgar。
$ZoneName = "some.domain"
$DNSHost = "dnsserver"

$Hosts = Get-DnsServerResourceRecord $ZoneName -ComputerName $DNSHost -RRType 'A' |? {
$Address = $_.RecordData.IPV4Address.ToString()
$LastOctet = $Address.Split(".")[-1]
$Address -like "17.[7-9].162.*" -and $LastOctet -in 16..238
}

ForEach ($H in $Hosts) {
Write-Host $H.HostName
}

最佳答案

使用PowerShell DNS cmdlet并从this answer借用代码,您可以执行以下操作:

$zone  = 'example.com'
$range = '17.7.162.16', '17.7.162.238'

function Addr2UInt($addr) {
$bytes = $addr.GetAddressBytes()
[array]::Reverse($bytes)
[BitConverter]::ToUInt32($bytes, 0)
}

$addrFrom = Addr2UInt ([Net.IPAddress]::Parse($range[0]))
$addrTo = Addr2UInt ([Net.IPAddress]::Parse($range[1]))

Get-DNSServerResourceRecord $zone -RRType 'A' | ? {
$addr = Addr2UInt $_.RecordData.IPv4Address;
$addrFrom -le $addr -and $addr -le $addrTo
}

不能使用 IPAddress之类的运算符来比较 -le对象,但是由于IP(v4)地址基本上是32位数字,因此您可以将地址的字节转换为数字以进行比较:
$bytes = $addr.GetAddressBytes()
(($bytes[0] * 256 + $bytes[1]) * 256 + $bytes[2]) * 256 + $bytes[3]

ToUInt32() 方法提供了一种更优雅的方式来进行此转换(这也使事情变得更加明显),但是由于该方法期望最低有效字节位于最低索引处,因此必须首先对数组进行反转。

该函数只是为了方便而包装了转换代码,因为我需要在脚本的3个地方使用它。

关于powershell - 生成指定子网中所有DNS记录的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com