[GH-ISSUE #86] Add Benckmark option to test multiple DNS Server #63

Closed
opened 2026-03-14 01:11:13 +03:00 by kerem · 2 comments
Owner

Originally created by @ewwink on GitHub (Jan 18, 2026).
Original GitHub issue: https://github.com/ameshkov/dnslookup/issues/86

Can you add benchmark option to compare 2 or more DNS Server speed.

The results is like this

Image

The above results are generated from dnslookup and wrapped in a powershell script.

# DNS Resolver List
$dnsServers = @(
    "tls://dns10.quad9.net",
    "tls://1.1.1.1", 
    "tls://8.8.8.8"
)

# 10 Random Domains
$testDomains = @("google.com", "cloudflare.com", "microsoft.com", "github.com", "facebook.com", 
                 "apple.com", "amazon.com", "netflix.com", "wikipedia.org", "reddit.com")

$results = @()
$totalStats = @{}

foreach ($domain in $testDomains) { $results += [PSCustomObject]@{ Domain = $domain } }

Write-Host "Starting DNS Benchmark" -ForegroundColor Blue

foreach ($server in $dnsServers) {
    Write-Host "Testing Server: $server" -ForegroundColor Yellow
    $sumMs = 0
    $successCount = 0

    for ($i = 0; $i -lt $testDomains.Count; $i++) {
        $output = & .\dnslookup.exe $testDomains[$i] $server | Out-String
        if ($output -match "elapsed\s+(\d+)\.") {
            $ms = [int]$matches[1]
            $results[$i] | Add-Member -MemberType NoteProperty -Name $server -Value "$($ms)ms" -Force
            $sumMs += $ms
            $successCount++
        } else {
            $results[$i] | Add-Member -MemberType NoteProperty -Name $server -Value "Timeout" -Force
        }
    }
    $avg = if ($successCount -gt 0) { [Math]::Round($sumMs / $successCount) } else { 0 }
    $totalStats[$server] = "$($avg)ms"
}

# --- PROSES TAMPILAN TABEL DENGAN WARNA ---
Write-Host "`n[BENCHMARK RESULTS]" -ForegroundColor Green

# Header Tabel
$header = "{0,-16}" -f "Domain"
foreach ($server in $dnsServers) { $header += " | {0,-22}" -f $server }
Write-Host $header -ForegroundColor White
Write-Host ("-" * $header.Length)

# Isi Data Domain
foreach ($row in $results) {
    $line = "{0,-16}" -f $row.Domain
    foreach ($server in $dnsServers) { $line += " | {0,-22}" -f $row.$server }
    Write-Host $line
}

# Garis Pemisah
$separator = "{0,-16}" -f "----------"
foreach ($server in $dnsServers) { $separator += " | {0,-22}" -f "----------" }
Write-Host $separator

# Baris Average dengan WARNA BIRU
$avgLine = "{0,-16}" -f "Average"
foreach ($server in $dnsServers) { $avgLine += " | {0,-22}" -f $totalStats[$server] }
Write-Host $avgLine "`n" -ForegroundColor Green

Originally created by @ewwink on GitHub (Jan 18, 2026). Original GitHub issue: https://github.com/ameshkov/dnslookup/issues/86 Can you add benchmark option to compare 2 or more DNS Server speed. The results is like this <img width="706" height="336" alt="Image" src="https://github.com/user-attachments/assets/95c70ffd-b22d-4268-8164-3862929581d2" /> The above results are generated from dnslookup and wrapped in a powershell script. ```powershell # DNS Resolver List $dnsServers = @( "tls://dns10.quad9.net", "tls://1.1.1.1", "tls://8.8.8.8" ) # 10 Random Domains $testDomains = @("google.com", "cloudflare.com", "microsoft.com", "github.com", "facebook.com", "apple.com", "amazon.com", "netflix.com", "wikipedia.org", "reddit.com") $results = @() $totalStats = @{} foreach ($domain in $testDomains) { $results += [PSCustomObject]@{ Domain = $domain } } Write-Host "Starting DNS Benchmark" -ForegroundColor Blue foreach ($server in $dnsServers) { Write-Host "Testing Server: $server" -ForegroundColor Yellow $sumMs = 0 $successCount = 0 for ($i = 0; $i -lt $testDomains.Count; $i++) { $output = & .\dnslookup.exe $testDomains[$i] $server | Out-String if ($output -match "elapsed\s+(\d+)\.") { $ms = [int]$matches[1] $results[$i] | Add-Member -MemberType NoteProperty -Name $server -Value "$($ms)ms" -Force $sumMs += $ms $successCount++ } else { $results[$i] | Add-Member -MemberType NoteProperty -Name $server -Value "Timeout" -Force } } $avg = if ($successCount -gt 0) { [Math]::Round($sumMs / $successCount) } else { 0 } $totalStats[$server] = "$($avg)ms" } # --- PROSES TAMPILAN TABEL DENGAN WARNA --- Write-Host "`n[BENCHMARK RESULTS]" -ForegroundColor Green # Header Tabel $header = "{0,-16}" -f "Domain" foreach ($server in $dnsServers) { $header += " | {0,-22}" -f $server } Write-Host $header -ForegroundColor White Write-Host ("-" * $header.Length) # Isi Data Domain foreach ($row in $results) { $line = "{0,-16}" -f $row.Domain foreach ($server in $dnsServers) { $line += " | {0,-22}" -f $row.$server } Write-Host $line } # Garis Pemisah $separator = "{0,-16}" -f "----------" foreach ($server in $dnsServers) { $separator += " | {0,-22}" -f "----------" } Write-Host $separator # Baris Average dengan WARNA BIRU $avgLine = "{0,-16}" -f "Average" foreach ($server in $dnsServers) { $avgLine += " | {0,-22}" -f $totalStats[$server] } Write-Host $avgLine "`n" -ForegroundColor Green ```
kerem closed this issue 2026-03-14 01:11:18 +03:00
Author
Owner

@ameshkov commented on GitHub (Jan 19, 2026):

It seems to be more relevant to this repo:
https://github.com/ameshkov/godnsbench

<!-- gh-comment-id:3766684487 --> @ameshkov commented on GitHub (Jan 19, 2026): It seems to be more relevant to this repo: https://github.com/ameshkov/godnsbench
Author
Owner

@ewwink commented on GitHub (Jan 19, 2026):

I will see it, thanks.

<!-- gh-comment-id:3767950979 --> @ewwink commented on GitHub (Jan 19, 2026): I will see it, thanks.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/dnslookup#63
No description provided.