DNS解析速度令人难以置信

时间:2015-11-03 14:04:21

标签: powershell dns

我正在尝试获取IP列表并使用Powershell将其解析为DNS名称。如果主机无法解析我正在尝试将其写入错误文件。目前,该脚本在能够解析为主机名的IP上运行速度极快(低于10毫秒),但对于那些不能解析脚本的脚本需要较长的时间(每个IP大约需要4500毫秒)。我尝试在非解析IP上只计算DNS解析时间,当它们失败时我得到大约65毫秒,所以我不确定是什么在分辨率上增加超过4000毫秒的额外拖动时间。当处理超过1,000个IP时,这将成为一个非常密集的计时过程。下面的脚本包含我一直用于解决问题的测量命令语句。

    $ips = get-content ".\source_ip.txt"
    $outFile = ".\resolvedTest.txt"
    $errorFile = ".\resolveErrorTest.txt"

    $commandTimes = @()

    foreach ($ip in $ips){
        $measure = Measure-Command{
            try {[string] $hostname = [System.Net.Dns]::GetHostByAddress($ip).HostName}
            catch [system.exception]{$hostname = $ip}

            $hostname = $hostname.Replace("@{HostName=","")
            $hostname = $hostname.Replace("}","")

            if ($hostname -eq $ip){
                Add-Content $errorFile "$hostname, Error"
            } else {
                Add-Content $outFile "$ip, $hostname"
            }
        }

        Write-Host $measure.TotalMilliseconds
        $commandTimes += ,$measure.TotalMilliseconds
    }

1 个答案:

答案 0 :(得分:0)

我试图删除不必要的陈述:

$ips = "127.0.0.1", "127.0.0.1"
$outFile = "c:\resolvedTest.txt"
$errorFile = "c:\resolveErrorTest.txt"

foreach ($ip in $ips){

    $measure = Measure-Command {
        try {
            $hostname = [System.Net.Dns]::GetHostByAddress($ip).HostName
        }
        catch {
            $hostname = $false
        }
    }

    if($hostname) {
        Write-Host ("$ip was successfully resolved to $hostname ({0:N0}ms elapsed)" -f $measure.TotalMilliseconds) -ForegroundColor Green
    } else {
        Write-Host ("$ip was not resolved ({0:N0}ms elapsed)" -f $measure.TotalMilliseconds) -ForegroundColor Red
    }

}

不知道这会更快。