使用CloudFlare 的DoH服务进行DNS查询

一般而言,dns 使用的是http协议,在连接之前将域名转化为ip, 通讯过程对于,dns服务器之间是透明,为什么不使用,https协议,因为当时还没有https。

而 DoH (DNS over HTTPS)即使用安全的 HTTPS 协议运行 DNS ,主要目的是增强用户的安全性和隐私性,dns 解析过程中的域名对于isp 不再可见,防止了DNS劫持和DNS污染。

以下代码是使用python 作为编程工具,使用 CloudFlare 作为DNS 基于DoH的 dns 查询。

其中 dns-json 作为 RFC 草案,还没有被推广,cloudflare(1.1.1.1)和Google(8.8.8.8)的dns都支持JSON格式的响应。

程序非常简单,并且能够被扩展到其他编程语言中。

以下使用了代理,因为1.1.1.1 在中国大陆被封锁了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import requests

url = "https://1.1.1.1/dns-query"
headers = {
"accept": "application/dns-json",
}

proxies = {
'http': 'http://127.0.0.1:7890',
'https': 'http://127.0.0.1:7890',
}
params = {
"name": "google.com",
"type": "A",
}

response = requests.get(url, params=params, headers=headers, proxies=proxies)

if response.status_code == 200:
data = response.json()
print(data)
if "Answer" in data:
for answer in data["Answer"]:
if "data" in answer:
print(f"IP地址: {answer['data']}")
else:
print("未找到IP地址")
else:
print(f"请求失败,状态码: {response.status_code}")


使用CloudFlare 的DoH服务进行DNS查询
https://kingjem.github.io/2024/10/14/使用CloudFlare-的DoH服务进行DNS查询/
作者
Ruhai
发布于
2024年10月14日
许可协议