C# 使用阿里DOH

阿里公共DNS

1. DNS over HTTPs(DoH)

阿里公共DNS通过RFC 8484指定的经过TLS加密的HTTP连接提供DNS解析

DNS over HTTPs(DoH)的URI接口 :(仅提供TLS API)

  • https://dns.alidns.com/dns-query?
  • https://alidns_ip/dns-query?

注意:其中alidns_ip是dns.alidns.com 的A和AAAA记录,可以是以下四个地址之一 :223.5.5.5,223.6.6.6,2400:3200::1, 2400:3200:baba::1.

请求方式: GET
请求参数 :

参数类型描述示例默认值
dnsstringbase64url编码的DNS请求内容dig alibaba.comd A, dns=uGkBAAABAAAAAAAAB2FsaWJhYmEDY29tAAABAAE必须包含

请求示例 : https://dns.alidns.com/dns-query?dns=uGkBAAABAAAAAAAAB2FsaWJhYmEDY29tAAABAAE
返回的DNS二进制数据 

b869 8180 0001 0004 0000 0001 0761 6c69
6261 6261 0363 6f6d 0000 0100 0107 616c
6962 6162 6103 636f 6d00 0001 0001 0000
012c 0004 6a0b d097 0761 6c69 6261 6261
0363 6f6d 0000 0100 0100 0001 2c00 04cb
77d7 5207 616c 6962 6162 6103 636f 6d00
0001 0001 0000 012c 0004 6a0b df65 0761
6c69 6261 6261 0363 6f6d 0000 0100 0100
0001 2c00 04cb 7781 6d00 0029 1000 0000
0000 000c 0008 0008 0001 2018 6a0b 22e6


注:根据RFC8484的定义,DoH服务适用于两类场景:一种是DNS HTTPS隧道,一种是应用层访问DNS数据。DNS wireformat二进制格式对应用不够友好,比如要处理DNS名字压缩机制等。DNS Json的API是为了提供给应用更友好的接入方式。

2. DNS JSON API

DNS JSON API的URL 接口 (提供TLS和非TLS API)

  • https://dns.alidns.com/resolve?
  • https://alidns_ip/resolve?
  • http://dns.alidns.com/resolve?
  • http://alidns_ip/resolve?

注意:其中alidns_ip是dns.alidns.com 的A和AAAA记录,可以是以下四个地址之一 :223.5.5.5,223.6.6.6,2400:3200::1, 2400:3200:baba::1.

请求方式 : GET
请求参数 

参数类型描述示例使用方法和默认值
namestring请求域名name=www.taobao.com.必选,无默认值
typenumber请求类型type=1可选,1
edns_client_subnetIPECS IPedns_client_subnet=1.2.3.4/24DNS代理使用,普通客户端不适用

**
关于edns_client_subnet参数 :

edns_client_subnet是为了支持DNS ECS功能(RFC7871),将用户的子网信息传递给权威DNS,做更精确的DNS解析和流量调度。其中掩码越长地址信息越精确,掩码越短用户隐私效果越好。建议使用"/24" 掩码长度

注:该参数是特地为DNS代理(proxy)使用DNS JSON API场景设计,即用户发送DNS查询给DNS代理,DNS代理通过该参数携带用户的子网信息传递给阿里公共DNS,最后传递到权威DNS服务器。

例如edns_client_subnet=1.2.3.4/24,权威服务器会收到基于1.2.3.0/24地址前缀信息来帮助用户选择DNS链路。

关于type参数支持类型

记录类型ID意义示例(以 taobao.com , www.taobao.com 为例)
A1IPv4 地址101.37.183.171
NS2NS 记录ns1.taobao.com.
CNAME5域名 CNAME 记录www.taobao.com.danuoyi.tbcache.com.
SOA6ZONE 的 SOA 记录ns4.taobao.com. hostmaster.alibabadns.com. 2018011109 3600 1200 3600 360
TXT16TXT 记录"v=spf1 include:spf1.staff.mail.aliyun.com -all"
AAAA28IPv6 地址240e:e1:f300:1:3::3fa

请求示例:
http://dns.alidns.com/resolve?name=www.taobao.com.&type=1
返回示例:

{"Status":0,  "TC":false,"RD":true,"RA":true,"AD":false,"CD":false,"Question":{       // 请求段"name":"www.taobao.com.","type":1},"Answer":[         // 应答段{"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.24.234"},{"name":"www.taobao.com.danuoyi.tbcache.com.","TTL":45,"type":1,"data":"47.246.24.233"}]//"Authority" 权威段, 如果有数据与Answer字段一致 //"Additional" 附加段, 如果有数据与Answer字段一致// 可选 "edns_client_subnet":"1.2.3.4/24"  
}

 C#代码

        private static string GetJsonIp(string dnsInfo){string ret = string.Empty;// 解析 JSON 数据JObject jsonResponse = JObject.Parse(dnsInfo);// 获取 Answer 数组JArray answerArray = (JArray)jsonResponse["Answer"];// 查找 A 记录并提取 IP 地址string ipAddress = null;foreach (JObject answer in answerArray){if ((int)answer["type"] == 1) // A 记录类型为 1{ipAddress = (string)answer["data"];break;}}if (ipAddress != null){Console.WriteLine($"IP Address: {ipAddress}");ret = ipAddress;}else{Console.WriteLine("No A record found.");}return ret;}/// <summary>/// 特殊方式获取域名IP ,DOH,默认使用阿里/// </summary>/// <param name="hostname"></param>/// <param name="dnsserver"></param>/// <param name="dnsport"></param>/// <returns></returns>public static async Task<string> GetSpecialDns(string hostname){string ret = string.Empty;var domain = hostname;var type = 1; // A 记录类型var uri = new Uri($"http://dns.alidns.com/resolve?name={Uri.EscapeDataString(domain)}&type={type}");// 创建 HttpClient 实例using (var httpClient = new HttpClient()){// 设置 AccepthttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));// 发送 GET 请求HttpResponseMessage response = await httpClient.GetAsync(uri);if (response.IsSuccessStatusCode){// 读取响应体var responseContent = await response.Content.ReadAsStringAsync();ret = GetJsonIp(responseContent);Console.WriteLine("Response: " + responseContent);}else{Console.WriteLine($"DOH query failed with status code: {response.StatusCode}");// 如果可能,获取错误详情var errorDetails = await response.Content.ReadAsStringAsync();Console.WriteLine($"Error details: {errorDetails}");}}return ret;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 调用手机摄像头

Python 调用手机摄像头 在手机上安装软件 这里以安卓手机作为演示&#xff0c;ISO也是差不多的 软件下载地址 注意&#xff1a;要想在电脑上查看手机摄像头拍摄的内容的在一个局域网里面(没有 WIFI 可以使用 热点 ) 安装完打开IP摄像头服务器 点击分享查看IP 查看局域网的I…

谷粒商城のNginx

文章目录 前言一、Nginx1、安装Nginx2、相关配置2.1、配置host2.2、配置Nginx2.3、配置网关 前言 本篇重点介绍项目中的Nginx配置。 一、Nginx 1、安装Nginx 首先需要在本地虚拟机执行&#xff1a; mkdir -p /mydata/nginx/html /mydata/nginx/logs /mydata/nginx/conf在项目…

数学建模笔记——TOPSIS[优劣解距离]法

数学建模笔记——TOPSIS[优劣解距离法] TOPSIS(优劣解距离)法1. 基本概念2. 模型原理3. 基本步骤4. 典型例题4.1 矩阵正向化4.2 正向矩阵标准化4.3 计算得分并归一化4.4 python代码实现 TOPSIS(优劣解距离)法 1. 基本概念 C. L.Hwang和 K.Yoon于1981年首次提出 TOPSIS(Techni…

Windows操作系统sid系统唯一标识符查看和修改

1、sid介绍 sid 作为windows系统唯一的标识&#xff0c;对某些集群业务有依赖关系&#xff0c;如果重复可能导致集群部署异常。 如&#xff1a;域控AD 就依赖 sid 功能。 但是某个云主机或虚拟机使用同一个ghost进行操作系统部署&#xff0c;就可能会导致重复的情况&#xf…

java-在idea中antrl的hello world

java-在idea中antrl的hello world 1. 在idea中安装ANTLR V4的插件2. 下载ANTLR的jar包3. idea中创建普通的java项目4. 创建一个Hello.g4的文件5. 使用idea生产接口文件6. java创建一个类和main方法7. 调试输出8. 参考链接 1. 在idea中安装ANTLR V4的插件 路径如下&#xff0c;…

为什么现在都流行开放式耳机?平价高品质蓝牙耳机推荐大赏

现在开放式耳机流行&#xff0c;是因为相比入耳式&#xff0c;它具有以下的优势&#xff1a; 一、佩戴舒适 开放式耳机通常设计轻盈&#xff0c;不直接刺激耳膜&#xff0c;长时间使用也不会给耳膜带来压迫感。而且其不入耳的设计不会堵塞耳道&#xff0c;使用较长时间后&…

Notepad++ 修改 About

1. 用这个工具&#xff0c;看标题&#xff0c;修改 1700 里的 Caption, 保存为 xx.exe, 2.修改链接&#xff0c;先准备如上。 2.1 使用插件 Hex Editor&#xff0c;拖入刚保存的 Notepad.exe 到 Notepad.exe, 按 c..S..H 2.2 按 ctrlf 查找 68 00 74 00 74 00 70 00 73 00 3…

gitlab+habor+jenkins+k8s 安装流程及配置实现CICD

以下是基本的安装流程及配置实现CICD的步骤&#xff1a; 安装GitLab&#xff1a; 安装依赖项&#xff1a;yum install curl policycoreutils-python openssh-server启动和设置SSH&#xff1a;systemctl enable sshd && systemctl start sshd安装Postfix&#xff1a;yum…

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中&#xff0c; "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时&#xff0c;经常听到第一范式&#xff08;1NF&#xff09;、第二范式&#xff08;2NF&#xff09;、第三范式&#xff08;3NF&#xff09;以及 BCNF&#xff08;Boyce-…

线程的四种操作

所属专栏&#xff1a;Java学习 1. 线程的开启 start和run的区别&#xff1a; run&#xff1a;描述了线程要执行的任务&#xff0c;也可以称为线程的入口 start&#xff1a;调用系统函数&#xff0c;真正的在系统内核中创建线程&#xff08;创建PCB&#xff0c;加入到链…

利士策分享,从零开始创业:一场勇敢而精彩的旅程

利士策分享&#xff0c;从零开始创业&#xff1a;一场勇敢而精彩的旅程 附上可落地执行的策略&#xff1a; 在创业的征途中&#xff0c;理论固然重要&#xff0c;但可落地执行的策略才是推动我们前进的实际动力。 以下是一些具体且可操作的策略&#xff0c;希望可以帮助你从零…

Linux grep筛选命令及管道符|详解

grep grep命令的全称为 global regular expression print&#xff0c;regular expression也就是正则表达式&#xff0c;这里是指通过正则表达式进行匹配检索 grep的用法为 grep 关键字 文件或目录路径 常用的option选项为-n&#xff0c;作用为显示检索出的内容所在行&#…

vue通过html2canvas+jspdf生成PDF问题全解(水印,分页,截断,多页,黑屏,空白,附源码)

前端导出PDF的方法不多&#xff0c;常见的就是利用canvas画布渲染&#xff0c;再结合jspdf导出PDF文件&#xff0c;代码也不复杂&#xff0c;网上的代码基本都可以拿来即用。 如果不是特别追求完美的情况下&#xff0c;或者导出PDF内容单页的话&#xff0c;那么基本上也就满足业…

面试—Linux

目录 ps tar netstat 文件处理命令&#xff08;增删改&#xff09; 文件操作&#xff08;查看&#xff09; 权限管理 文件搜索 网络管理 压缩命令 Vim编辑器 ps ps命令用于显示当前系统的进程状态 包括一些进程ID&#xff0c;终端&#xff0c;运行时间等 常见参数 …

《数字信号处理》学习05-单位冲击响应与系统响应

目录 一&#xff0c;单位冲激响应 二&#xff0c;LTI系统对任意序列的系统响应 三&#xff0c;LTI系统的性质 通过上一篇文章《数字信号处理》学习04-离散时间系统中的线性时不变系统-CSDN博客的学习&#xff0c;我已经知道了离散时间线性时不变系统&#xff08;LTI&#x…

GQA (group query attention)

什么是GQA&#xff1f; 多个head的Query共用一组K和V。llama模型就用到该技术。 需要明确几点&#xff1a; 1.group有几组 2.每个group对应几个head 3.q以head为单位 k,v以group为单位 每个head/group特征维度都是head_dim 代码实现 import torch.nn as nn import torch …

串口通信协议(UART)

简介 uart通讯协议&#xff0c;是一种成本低、容易使用、通信线路简单&#xff0c;可实现两个设备的互相通信的协议&#xff1b;是一种全双工&#xff0c;设备点对点通信的协议。下面从硬件电路、电平标准和串口参数等方面来了解uart通信协议。 硬件电路 硬件电路非常简单&am…

深入Redis:强大的主从复制

如果某个服务器或者程序&#xff0c;只有一个节点&#xff08;服务器&#xff09;&#xff0c;就会有很大的问题。比如可用不高&#xff0c;并发量也比较低。引入分布式系统&#xff0c;也主要是为了解决上述的单点问题。 Redis&#xff0c;主要部署在分布式系统上。在分布式系…

Docker容器相关命令

Docker是一种容器化技术&#xff0c;可以帮助用户更轻松地创建、部署和管理容器。下面是一些常见的Docker容器管理任务&#xff1a; 创建容器&#xff1a;使用Docker镜像创建一个新的容器。 docker run image_name列出容器&#xff1a;查看当前运行的容器列表。 docker ps启动容…

无人机之地面站篇

无人机的地面站&#xff0c;又称无人机控制站&#xff0c;是整个无人机系统的重要组成部分&#xff0c;扮演着作战指挥中心的角色。以下是对无人机地面站的详细阐述&#xff1a; 一、定义与功能 无人机地面站是指具有对无人机飞行平台和任务载荷进行监控和操纵能力的一组设备&…