通过域名来访问服务器,但是对于网络层来说,其无法识别域名,所以需要将域名先转换成IP地址,
而DNS协议就是完成域名到IP地址的映射。
自建本地DNS工作原理
一次完整的查询请求经过的流程:
客户端Client -->客户端Client dns缓存-->操作系统dns缓存hosts文件 -->本地dns服务器-->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS
自建本地DNS截获访问域名,修改操作系统网卡dns或路由器dns指向自建本地DNS,从而使请求数据经过自建本地DNS。
主机host优先级:dns缓存>hosts文件>dns服务
本地DNS
本地DNS是指你电脑上网时IPv4或者IPv6设置中填写的那个DNS。这个可以手工指定。具体如下:
如果你的电脑是直连运营商(ISP)网络,一般默认设置情况下DNS为ISP的服务器地址。
如果你的电脑和ISP之间还加了无线或者有线路由(路由器本身会内置DNS转发器),它的作用是将发往它所有的DNS请求转发到上层DNS,但最终会转发到ISP的DNS。
如果手动修改了DNS,比如改成8.8.8.8这样的公用DNS服务器,那么指的就是这个服务器。
本地DNS不是权威服务器,相当于一个代理的DNS解析服务器,他会帮你迭代权威服务器返回的回答,然后把最终查到的IP返回给你。
当客户端向本地 DNS 服务器发出请求后,本地 DNS 服务器查询本机缓存
step 1. 先把路由器或本机的本地DNS 修改为我们的程序
1.2.1.修改本机的DNS
windos系统网卡本地连接里面有一个DNS设置
打开网络设置。
获取DNS服务器地址。
找到本地网络,右键打开,点击“属性”。
找到“Internet协议版本4(TCP/IPv4)”,双击打开。
将DNS从自动获得改成手动填写的,输入一组DNS保存即可
1.2.2.修改路由的DNS
修改路由器的dns则是把连接路由器的所有终端进行修改,该修改项是存在于dhcp信息里,因此每个连接该路由器的终端都会获取到设置的dns
https://www.cnblogs.com/leiblog/p/10716959.html
C#中利用System.Net.DNS类进行DNS编程,包括同步方法GetHostName()、GetHostByName()、GetHostByAddress()和Resolve()的使用,以及异步方法的应用示例,帮助开发者实现DNS解析和主机信息获取
port 53 筛选端口(DNS服务的端口为53)
在C#中实现一个简单的DNS服务器,需要理解DNS查询和响应的工作流程。服务器端通常会监听UDP端口53,接收客户端发送的DNS请求,解析请求报文,查找相应的记录,然后构造响应报文并返回
useful links
C#的DNS协议完整实现代码
https://download.csdn.net/download/cc1072027237/9387454
wireshark dns域名解析抓包实验分析
https://www.cnblogs.com/mggahui/p/13899888.html