개발자 참고자료
DNS 전파 검사기 API 문서
DNS 전파 검사기 API 문서: 전 세계 13개의 글로벌 DNS 서버에서 DNS 레코드 전파를 확인합니다. 마이그레이션 후 DNS 변경 확인, DNS 문제 해결, TTL 만료 모니터링에 필수입니다. 서버는 북미, 유럽, 아시아태평양 및 기타 지역을 포함합니다.
DNS 전파 검사기
전 세계 13개의 글로벌 DNS 서버에서 DNS 레코드 전파를 확인합니다. 마이그레이션 후 DNS 변경 확인, DNS 문제 해결, TTL 만료 모니터링에 필수입니다. 서버는 북미, 유럽, 아시아태평양 및 기타 지역을 포함합니다.
GET
/v1/dns/propagation
쿼리 매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
| domain 필수 | string | 확인할 도메인(예: "example.com" 또는 "subdomain.example.com") |
| type 선택 사항 | string | 레코드 유형: A, AAAA, CNAME, MX, TXT, NS, SOA(기본값: A) |
| expected 선택 사항 | string | 전파에 대해 검증할 예상 값(예: 새 IP 주소) |
응답 필드
| 필드 | 유형 | 설명 |
|---|---|---|
propagation_percentage | number | 예상 값을 반환하는 서버의 백분율(0-100) |
fully_propagated | boolean | 모든 서버가 일관된 값을 반환하면 참 |
consistent | boolean | 모든 성공 응답이 동일한 값을 가지면 참 |
unique_values | array | 서버 전체에서 확인된 모든 고유한 레코드 값 |
results | array | 위치, 레코드, TTL, 응답 시간을 포함한 서버별 결과 |
예제 요청
# Check A record propagation
curl "https://domscan.net/v1/dns/propagation?domain=example.com&type=A"
# Check MX record with expected value
curl "https://domscan.net/v1/dns/propagation?domain=example.com&type=MX&expected=mail.example.com"
const url = new URL("https://domscan.net/v1/dns/propagation");
url.searchParams.set("domain", "example.com");
url.searchParams.set("type", "A");
const response = await fetch(url);
const data = await response.json();
console.log(`Propagation: ${data.propagation_percentage}%`);
console.log(`Fully propagated: ${data.fully_propagated}`);
// Check which servers are still showing old values
data.results
.filter(r => !r.success || r.records[0] !== data.expected)
.forEach(r => console.log(`${r.server.name}: ${r.records}`));
import requests
response = requests.get(
"https://domscan.net/v1/dns/propagation",
params={"domain": "example.com", "type": "A"}
)
data = response.json()
print(f"Propagation: {data['propagation_percentage']}%")
print(f"Fully propagated: {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"
)
func main() {
resp, _ := http.Get("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)
fmt.Printf("Propagation: %.0f%%\n", data["propagation_percentage"])
fmt.Printf("Fully propagated: %v\n", data["fully_propagated"])
}
require 'net/http'
require 'json'
uri = URI("https://domscan.net/v1/dns/propagation?domain=example.com&type=A")
response = Net::HTTP.get_response(uri)
data = JSON.parse(response.body)
puts "Propagation: #{data['propagation_percentage']}%"
puts "Fully propagated: #{data['fully_propagated']}"
예제 응답
{
"domain": "example.com",
"record_type": "A",
"propagation_percentage": 100,
"fully_propagated": true,
"consistent": true,
"unique_values": ["93.184.216.34"],
"results": [
{
"server": {
"name": "Cloudflare",
"ip": "1.1.1.1",
"location": "Global Anycast"
},
"success": true,
"records": ["93.184.216.34"],
"ttl": 86400,
"response_time_ms": 12
},
{
"server": {
"name": "Google",
"ip": "8.8.8.8",
"location": "Global Anycast"
},
"success": true,
"records": ["93.184.216.34"],
"ttl": 86400,
"response_time_ms": 15
}
],
"summary": {
"total_servers": 13,
"successful": 13,
"failed": 0
}
}
GET
/v1/dns/servers
전파 점검에 사용되는 DNS 서버 목록을 얻으세요. 위치 및 IP 주소와 함께 모든 13개의 글로벌 서버를 반환합니다.
예제 응답
{
"servers": [
{"name": "Cloudflare", "ip": "1.1.1.1", "location": "Global Anycast"},
{"name": "Google", "ip": "8.8.8.8", "location": "Global Anycast"},
{"name": "Quad9", "ip": "9.9.9.9", "location": "Global Anycast"},
{"name": "OpenDNS", "ip": "208.67.222.222", "location": "US"},
{"name": "Comodo", "ip": "8.26.56.26", "location": "US"}
],
"total": 13
}
응답 필드
| 필드 | 유형 |
|---|---|
servers[] |
object[] |
servers[] |
object |
servers[].name |
string |
servers[].location |
string |
servers[].country |
string |
servers[].ip |
string |
servers[].provider |
string |
total |
integer |
GET
/v1/dns/history
쿼리 매개변수
| 매개변수 | 유형 | 필수 |
|---|---|---|
| domain | string | 필수 |
| type | string | 선택 사항 |
| from | string | 선택 사항 |
| to | string | 선택 사항 |
| limit | integer | 선택 사항 |
응답 필드
| 필드 | 유형 |
|---|---|
domain |
string |
history[] |
object[] |
history[] |
object |
history[].date |
string |
history[].record_type |
string |
history[].changes[] |
object[] |
history[].changes[] |
object |
history[].changes[].action |
string |
history[].changes[].value |
string |
current_records |
object |
first_seen |
string | null |
last_seen |
string | null |
total_changes |
integer |
record_types_tracked[] |
string[] |
beta_notice |
string |
meta |
object |
meta.note |
string |
meta.data_source |
string |
예제 요청
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/dns/history?domain=example.com&type=A&from=2026-01-01&to=2026-04-15&limit=10"
예제 응답
{
"domain": "example.com",
"history": [
{
"date": "2026-04-13",
"record_type": "A",
"changes": [
{
"action": "added",
"value": "104.20.23.154"
},
{
"action": "added",
"value": "172.66.147.243"
},
{
"action": "removed",
"value": "104.18.26.120"
}
]
}
],
"current_records": {
"A": [
"104.20.23.154",
"172.66.147.243"
]
},
"first_seen": "2026-01-01",
"last_seen": "2026-04-13",
"total_changes": 3,
"record_types_tracked": [
"A"
],
"beta_notice": "This endpoint is in beta. History data accumulates from API usage over time and does not include external historical sources.",
"meta": {
"note": "History data recorded from prior API lookups.",
"data_source": "internal"
}
}