Resolva nomes de domínio por HTTPS usando a API JSON DoH, disponível em endpoints com e sem TLS.
Endpoints
https://223.5.5.5/resolve?name=domain&type=record type&uid=AccountID&ak=AccessKey ID&key=****&ts=timestamp
http://223.5.5.5/resolve?name=domain&type=record type&uid=AccountID&ak=AccessKey ID&key=****&ts=timestamp
https://223.6.6.6/resolve?name=domain&type=record type&uid=AccountID&ak=AccessKey ID&key=****&ts=timestamp
http://223.6.6.6/resolve?name=domain&type=record type&uid=AccountID&ak=AccessKey ID&key=****&ts=timestamp
Parâmetros da requisição
Método: GET. Parâmetros:
|
Parâmetro |
Tipo |
Descrição |
Exemplo |
Uso e padrão |
|
name |
string |
Nome do domínio na requisição |
name=www.taobao.com |
Obrigatório, sem valor padrão |
|
type |
string |
type=A |
Opcional, sem valor padrão |
|
|
edns_client_subnet |
IP |
IP do ECS |
edns_client_subnet=1,2.XX.XX/24 |
Apenas para proxies dns |
|
short |
boolean |
short=true ou short=1 |
Opcional, desativado por padrão |
|
|
uid |
string |
id da conta no console (não o id da conta Alibaba Cloud) |
uid=9**9 |
Obrigatório, sem valor padrão |
|
ak |
string |
AccessKey ID do console |
ak=test |
Obrigatório, sem valor padrão |
|
ts |
string |
Timestamp |
Inteiro sem sinal, segundos desde 1º de janeiro de 1970 |
ts=1614927253 Obrigatório, sem valor padrão |
|
key |
string |
string de hash para autenticação |
Assinatura gerada usando o AccessKey Secret |
key=fb321ab77496a89c04de0a1e979bfee4b4678a0dcd57f4da1da83****490f64b Obrigatório, sem valor padrão |
|
did |
string |
id do dispositivo |
did=afck0100 |
Opcional |
Sobre o parâmetro edns_client_subnet
O parâmetro edns_client_subnet implementa o dns ECS (RFC7871), transmitindo as informações de sub-rede do usuário para o dns autoritativo, o que garante uma resolução precisa e o redirecionamento de tráfego. Máscaras de sub-rede mais longas fornecem um endereçamento mais preciso, enquanto máscaras mais curtas melhoram a privacidade. Recomenda-se o uso de uma máscara de tamanho /24.
Use este parâmetro quando um proxy dns encaminhar consultas por meio da API JSON DoH. O proxy envia as informações de sub-rede do usuário para o HTTPDNS, que as repassa ao servidor autoritativo.
Por exemplo, com subnet=1,2.XX.XX/24, o servidor autoritativo recebe o prefixo 1,2.XX.XX/24 para selecione o caminho dns ideal.
Sobre os tipos suportados para o parâmetro type
|
Tipo de registro |
ID |
Observações |
|
A |
1 |
Endereço IPv4 |
|
NS |
2 |
Registro NS |
|
CNAME |
5 |
Registro CNAME de domínio |
|
SOA |
6 |
Registro SOA da ZONA |
|
TXT |
16 |
Registro TXT |
|
AAAA |
28 |
Endereço IPv6 |
|
PTR |
12 |
Registro PTR, usado para pesquisa reversa de dns |
|
MX |
15 |
Registro de troca de e-mail (Mail exchange) |
|
SRV |
33 |
O registro SRV especifica o host e a porta para serviços específicos |
|
CAA |
257 |
O registro CAA é uma medida de segurança para evitar a emissão incorreta de certificados HTTPS |
Algoritmo para gerar o parâmetro de autenticação key
key = sha256(AccountID+AccessKey Secret+ts+qname+AccessKey ID)
Note: The plus sign (+) represents string concatenation, not the actual "+" character.
O Account id é o valor em string do seu id de conta (por exemplo, "9**9"). O ts é o timestamp da requisição atual. O qname é o nome do domínio requisitado. Para gerar um par de AccessKey, siga Crie uma chave.
Exemplo de geração da key
Considere:
Account id=5***4
AccessKey Secret=12345**
qname=aliyun.com
ts=1614927253
AccessKey id=5*4_2155917885567**
key=sha256(54123451614927253aliyun.com54_2155917885567**)
key gerada:
key=*ab77496a89c04de0a1e979bfee4b4678a0dcd57f4da1da83***a490f64b
Exemplo de requisição
https://223.5.5.5/resolve?name=domain&type=record type&uid=AccountID&ak=AccessKey ID&key=****&ts=timestamp
Exemplo de resposta
{
"Status":0,
"TC":false,
"RD":true,
"RA":true,
"AD":false,
"CD":false,
"Question":{ // Request section
"name":"www.taobao.com.",
"type":1
},
"Answer":[ // Response section
{
"name":"www.taobao.com.",
"TTL":45,
"type":5,
"data":"www.taobao.com.danuoyi.tbcache.com."
},
{
"name":"www.taobao.com.danuoyi.tbcache.com.",
"TTL":45,
"type":1,
"data":"47.246.XX.XX"
},
{
"name":"www.taobao.com.danuoyi.tbcache.com.",
"TTL":45,
"type":1,
"data":"47.246.XX.XX"
}
]
//"Authority" Authority section, if data exists, format is the same as Answer field
//"Additional" Additional section, if data exists, format is the same as Answer field
// Optional "edns_client_subnet":"1.2.XX.XX/24"
}
Descrição dos valores de resposta
Nome do campo | Descrição | Exemplo |
Status | RCODE do cabeçalho dns | 0: noerror 1: formerr 2: servfail 3: nxdomain |
TC | Sinalizador TC: indica se o truncamento é possível | Geralmente false |
RD | Sinalizador RD: indica se a recursão é desejada | Geralmente true |
RA | Sinalizador RA: indica se a recursão está disponível | Geralmente true |
AD/CD | Sinalizadores do cabeçalho dns | Geralmente false |
Question | Campo de requisição dns | Nenhum |
Answer | Campo de resposta dns | Nenhum |
name | Nome do domínio, incluído tanto em Question quanto em Answer | www.taobao.com |
type | Tipo de requisição conforme listado em About supported types for the type parameter | Como: A, AAAA, TXT, CNAME, NS, SOA |
TTL | Tempo máximo de cache no servidor, em segundos | 3600 |
data | Dados de resposta (varia de acordo com o tipo) | Nenhum |
Exemplo de resposta no modo curto:
Exemplo de requisição de registro A para www.taobao.com:
https://223.5.5.5/resolve?name=domain&type=A&uid=AccountID&short=1&ak=AccessKey ID&key=****&ts=timestamp
Resposta:
["221.229.XX.XX","61.155.XX.XX","221.229.XX.XX"]
Requisição de registro CNAME:
https://223.5.5.5/resolve?name=domain&type=CNAME&uid=AccountID&short=1&ak=AccessKey ID&key=****&ts=timestamp
Resposta:
["www.taobao.com.danuoyi.tbcache.com."]
Resposta de falha
Requisições com falha retornam HTTP 4xx/5xx com um code de erro JSON para depuração ou relato de problemas.
Exemplo:
{
"code":"UrlParameterError"
}
Lista de codes de erro
|
code de erro |
code de status HTTP |
Descrição |
|
UrlParameterError |
400 |
Erro de formato no parâmetro da requisição |
|
NoPermission |
401 |
Falha na autenticação |
|
UrlPathError |
404 |
Erro de URL |
|
NoResponse |
500 |
Tempo limite da requisição excedido, sem resposta |
O guia DoH JSON API Best Practices aborda a resolução de domínios com o HTTPDNS.
O SDK lida com as assinaturas automaticamente. Comece a usar o Android SDK development guide ou o iOS SDK development guide.