Geliştirici Referansı

DNS Çözümleyici Karşılaştırması

DNS Çözümleyici Karşılaştırması API belgelerini, istek parametrelerini, yanıt alanlarını, kod örneklerini ve DomScan entegrasyonları için hata işlemeyi inceleyin.

DNS Çözümleyici Karşılaştırması

Bağımsız olarak sorgulanan iki genel özyinelemeli DoH sağlayıcısından gelen DNS kayıt yanıtlarını karşılaştırın: Cloudflare ve Google. Her ikisi de global-anycast hizmetidir. Sonuçlar istek yolundan sağlayıcı gözlemleridir, coğrafi ölçüm noktaları, yetkili ad sunucusu kontrolleri veya dünya çapında yayılım kanıtı değildir.

GET /v1/dns/propagation

Sorgu Parametreleri

ParametreTürAçıklama
domain gerekli string Yapılandırılmış her çözümleyici üzerinden sorgulanacak alan adı (ör. "example.com")
type isteğe bağlı string Karşılaştırılacak kayıt türü: A, AAAA, CNAME, MX, TXT, NS, SOA (varsayılan: A)
expected isteğe bağlı string Karşılaştırma temeli olarak kullanılacak isteğe bağlı expected kayıt değeri (ör. yeni IP adresi)

Yanıt Alanları

AlanTürAçıklama
propagation_percentagenumberexpected yoksa: en büyük özdeş yanıt grubu tüm yapılandırılmış çözümleyicilere bölünür. expected varsa: tam expected eşleşmeleri tüm yapılandırılmış çözümleyicilere bölünür (0-100). Hatalar paydada kalır.
fully_propagatedbooleanTüm yapılandırılmış çözümleyiciler aynı yanıtta birleştiğinde veya expected verilmişse hepsi onunla eşleştiğinde true olur
consistentbooleanYalnızca yapılandırılmış her çözümleyici başarılı olup aynı canonical yanıt kümesini döndürdüğünde true olur
unique_valuesarrayBaşarılı çözümleyicilerin döndürdüğü benzersiz kayıt değerleri
resultsarrayHer çözümleyici için sağlayıcı, kayıtlar, gözlenen TTL, istek yolu yanıt süresi ve hatalar

Örnek İstek

# Compare A records across configured resolvers
curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/dns/propagation?domain=example.com&type=A"

# Compare MX answers against an expected value
curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/dns/propagation?domain=example.com&type=MX&expected=mail.example.com"
const domscanFetch = (url, options = {}) =>
  fetch(url, {
    ...options,
    headers: { ...options.headers, "X-API-Key": "your-api-key" },
  });

const url = new URL("https://domscan.net/v1/dns/propagation");
url.searchParams.set("domain", "example.com");
url.searchParams.set("type", "A");
url.searchParams.set("expected", "203.0.113.42");

const response = await domscanFetch(url);
const data = await response.json();

// Legacy response field names are retained for API compatibility.
console.log(`Resolver convergence: ${data.propagation_percentage}%`);
console.log(`All configured resolvers match: ${data.fully_propagated}`);

// Check which servers are still showing old values
data.results
  .filter(r => !r.success || !r.records.includes(data.expected_value))
  .forEach(r => console.log(`${r.server.name}: ${r.records}`));
import requests

domscan = requests.Session()
domscan.headers.update({"X-API-Key": "your-api-key"})

response = domscan.get(
    "https://domscan.net/v1/dns/propagation",
    params={"domain": "example.com", "type": "A"}
)
data = response.json()

# Legacy response field names are retained for API compatibility.
print(f"Resolver convergence: {data['propagation_percentage']}%")
print(f"All configured resolvers match: {data['fully_propagated']}")

# Show servers with different values
for result in data['results']:
    print(f"{result['server']['name']}: {result['records']}")
package main

import (
  "encoding/json"
  "fmt"
  "net/http"
  "os"
)

func domscanGet(url string) (*http.Response, error) {
  request, err := http.NewRequest(http.MethodGet, url, nil)
  if err != nil {
    return nil, err
  }
  request.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))
  return http.DefaultClient.Do(request)
}

func main() {
  resp, _ := domscanGet("https://domscan.net/v1/dns/propagation?domain=example.com&type=A")
  defer resp.Body.Close()

  var data map[string]interface{}
  json.NewDecoder(resp.Body).Decode(&data)

  // Legacy response field names are retained for API compatibility.
  fmt.Printf("Resolver convergence: %.0f%%\n", data["propagation_percentage"])
  fmt.Printf("All configured resolvers match: %v\n", data["fully_propagated"])
}
require 'net/http'
require 'json'

uri = URI("https://domscan.net/v1/dns/propagation?domain=example.com&type=A")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") { |http| http.request(request) }
data = JSON.parse(response.body)

# Legacy response field names are retained for API compatibility.
puts "Resolver convergence: #{data['propagation_percentage']}%"
puts "All configured resolvers match: #{data['fully_propagated']}"

Örnek Yanıt

{
  "domain": "example.com",
  "record_type": "A",
  "measurement_scope": "configured_recursive_resolvers",
  "percentage_basis": "resolver_convergence",
  "propagation_percentage": 100,
  "fully_propagated": true,
  "consistent": true,
  "unique_values": ["93.184.216.34"],
  "results": [
    {
      "server": {
        "name": "Cloudflare 1.1.1.1",
        "ip": "1.1.1.1",
        "provider": "Cloudflare",
        "location": "Global anycast",
        "country": "GLOBAL",
        "scope": "global-anycast",
        "doh_endpoint": "https://cloudflare-dns.com/dns-query"
      },
      "success": true,
      "records": ["93.184.216.34"],
      "ttl": 86400,
      "response_time_ms": 12
    },
    {
      "server": {
        "name": "Google Public DNS",
        "ip": "8.8.8.8",
        "provider": "Google",
        "location": "Global anycast",
        "country": "GLOBAL",
        "scope": "global-anycast",
        "doh_endpoint": "https://dns.google/resolve"
      },
      "success": true,
      "records": ["93.184.216.34"],
      "ttl": 86400,
      "response_time_ms": 15
    }
  ],
  "summary": {
    "total_servers": 2,
    "successful": 2,
    "failed": 0
  }
}
GET /v1/dns/servers

Karşılaştırmada kullanılan iki genel özyinelemeli DoH sağlayıcısını listeleyin: Cloudflare ve Google. Her ikisi de global-anycast çözümleyicisidir, coğrafi ölçüm noktası veya yetkili ad sunucusu değildir.

Örnek Yanıt

{
  "measurement_scope": "configured_recursive_resolvers",
  "geographic_vantage": false,
  "servers": [
    {
      "name": "Cloudflare 1.1.1.1",
      "ip": "1.1.1.1",
      "provider": "Cloudflare",
      "location": "Global anycast",
      "country": "GLOBAL",
      "scope": "global-anycast",
      "doh_endpoint": "https://cloudflare-dns.com/dns-query"
    },
    {
      "name": "Google Public DNS",
      "ip": "8.8.8.8",
      "provider": "Google",
      "location": "Global anycast",
      "country": "GLOBAL",
      "scope": "global-anycast",
      "doh_endpoint": "https://dns.google/resolve"
    }
  ],
  "total": 2
}

Yanıt Alanları

Alan Tür
measurement_scope string
geographic_vantage boolean
servers[] object[]
servers[] object
servers[].name string
servers[].location string
servers[].country string
servers[].ip string
servers[].provider string
servers[].scope string
servers[].doh_endpoint string
servers[].documentation_url string
servers[].format string
total integer
POST /v1/dns/propagation/bulk

Gövde Parametreleri

Parametre Tür gerekli
domains string[] gerekli
type string
İzin verilen değerler AAAAACNAMEMXTXTNSSOA
Varsayılan A
isteğe bağlı
expected string isteğe bağlı

Yanıt Alanları

Alan Tür
results[] unknown[]
meta object
meta.total integer
meta.succeeded integer
meta.failed integer
meta.max_items integer
meta.credits_per_item integer
meta.duration_ms integer

Örnek İstek

curl -X POST "https://domscan.net/v1/dns/propagation/bulk" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $DOMSCAN_API_KEY" \
  -d '{
  "domains": [
    "example.com",
    "cloudflare.com"
  ],
  "type": "A"
}'

Örnek Yanıt

{
  "results": [
    null
  ],
  "meta": {
    "total": 1,
    "succeeded": 1,
    "failed": 1,
    "max_items": 10,
    "credits_per_item": 1,
    "duration_ms": 1
  }
}

Harika şirketlerdeki insanlar tarafından kullanılıyor

VercelLLM PulseOLXCasa ModernaPipeCal.comBeehiivSnykTogglRemoteSprigDeel