好多东西都没写,好多东西都是半吊子工程
花了半宿的时间,把我的 DNS 服务器修改完了
去年下半年,一个朋友扔给了我一个DNS劫持的工具,类似病毒,但是不是病毒,仅仅有一个监控、劫持DNS的功能,所以顶多也就算是个恶意软件。由于我啥都不会,我也好奇DNS服务器是怎么做的,DNS到底是什么玩艺,所以那时候我开始反汇编那个小程序,但是那时候。。。没做完。。。今天凌晨,我从我的电脑里面找到了我的代码,一边继续反汇编那个程序,一边继续修改代码,把它修改完了。
我的程序主界面就是这样,感觉很简陋。。。

红框位置是三个模式的选择,
拦截模式:接收全部的数据,但不做回应,也就是全都拦下来了,能看到请求,但是不做回应
代理模式:作为中间跳板,给 DNS 请求做代理,再稍微修改一下,就是一个DNS劫持的工具,代理转向的 DNS 主服务器地址在粉色方框中
DNS模式:自己作为一个 DNS 服务器自己做 DNS 解析,使用绿色方框内部的域名表里面的地址,以及黑色方框里面的默认地址作为IP地址,来解析自己收到的全部DNS请求,收到一个请求,去左侧绿色方框里的List里面寻找是否有当前域名对应的IP地址,如果有的话,取出这个IP,返回给发送请求的人,如果没有,就返回黑色框中的默认IP
(总感觉自己少写了什么,现在想到了。。。但不是上面的这些)
最下面的那一块,就是收到的全部请求了,可以直接看到哪个地址,哪个端口,请求了哪个域名,然后返回给发送请求的人的IP是什么。
绿色框中的DNS列表,是可以从文件中读取的,文件格式类似于Windows的DNS本地解析文件
正常运行的时候,就是下图了。。。

我在虚拟机里面写的代码。
我在虚拟机里面打开了一个我的软件,把模式设置成代理模式,代理目标设置为我宿主机的IP,然后启动代理
我的宿主机里面,同样打开了一个我的软件,最初把模式也设置成代理模式,代理目标是 8.8.8.8 也就是google的DNS地址
然后,我在虚拟机里面设置了网卡的默认DNS为虚拟机自己本身
这样,我打开一个IE之后,DNS请求的走向就是
IE —— 虚拟机里面我的程序 —— 宿主机里面我的程序 —— 8.8.8.8
中间经过了两次跳板
去年下半年,一个朋友扔给了我一个DNS劫持的工具,类似病毒,但是不是病毒,仅仅有一个监控、劫持DNS的功能,所以顶多也就算是个恶意软件。由于我啥都不会,我也好奇DNS服务器是怎么做的,DNS到底是什么玩艺,所以那时候我开始反汇编那个小程序,但是那时候。。。没做完。。。今天凌晨,我从我的电脑里面找到了我的代码,一边继续反汇编那个程序,一边继续修改代码,把它修改完了。
我的程序主界面就是这样,感觉很简陋。。。

红框位置是三个模式的选择,
拦截模式:接收全部的数据,但不做回应,也就是全都拦下来了,能看到请求,但是不做回应
代理模式:作为中间跳板,给 DNS 请求做代理,再稍微修改一下,就是一个DNS劫持的工具,代理转向的 DNS 主服务器地址在粉色方框中
DNS模式:自己作为一个 DNS 服务器自己做 DNS 解析,使用绿色方框内部的域名表里面的地址,以及黑色方框里面的默认地址作为IP地址,来解析自己收到的全部DNS请求,收到一个请求,去左侧绿色方框里的List里面寻找是否有当前域名对应的IP地址,如果有的话,取出这个IP,返回给发送请求的人,如果没有,就返回黑色框中的默认IP
(总感觉自己少写了什么,现在想到了。。。但不是上面的这些)
最下面的那一块,就是收到的全部请求了,可以直接看到哪个地址,哪个端口,请求了哪个域名,然后返回给发送请求的人的IP是什么。
绿色框中的DNS列表,是可以从文件中读取的,文件格式类似于Windows的DNS本地解析文件
正常运行的时候,就是下图了。。。

我在虚拟机里面写的代码。
我在虚拟机里面打开了一个我的软件,把模式设置成代理模式,代理目标设置为我宿主机的IP,然后启动代理
我的宿主机里面,同样打开了一个我的软件,最初把模式也设置成代理模式,代理目标是 8.8.8.8 也就是google的DNS地址
然后,我在虚拟机里面设置了网卡的默认DNS为虚拟机自己本身
这样,我打开一个IE之后,DNS请求的走向就是
IE —— 虚拟机里面我的程序 —— 宿主机里面我的程序 —— 8.8.8.8
中间经过了两次跳板
我首先测试在虚拟机里面打开 fff 这个网址,然后经过两次跳转之后,由 8.8.8.8 解析再按原路返回给我的虚拟机,fff 网站的IP是207.189.109.121
正确,没有问题
然后我把宿主机里面我的程序设置成DNS模式,把baidu 的 IP 设置成本地环网IP ,再次在虚拟机里面发送请求,
结果很正确,虚拟机里面的程序访问了我虚拟机里面搭建的服务器
感觉问题不大了
最后还有个东西我忘记测试了,重新测试的

就是红色框里面的东西。。。
下面那条 baidu 的信息,是我的程序启动 DNS模式 的时候,我自己解析的
上面那条 baidu 的信息,是我的程序启动 代理模式 的时候,从 8.8.8.8 得到的信息
没什么问题
对了,还有个问题
就是如何设置DNS了,
实际上,设置DNS的方法有三个
写代码,直接设置
写代码启动控制台,调用控制台命令来设置DNS(方便,但是如果没有那个内、外部命令怎么办。。。不考虑)
手动打开本地连接,点属性,手动设置(不考虑)
可以考虑的方法只有第一个了,
据我了解,我知道的设置DNS的Windows API就有2个,这些都不是事。
但是我认为如果真的用程序来设置DNS的话,那这个程序不就真的成DNS劫持的程序了么。
后台偷偷设置了DNS,然后主界面隐藏了,这就是一个DNS劫持的工具,我是不想这么做。所以没有加那么多。
就这样吧。。。留个东西纪录一下。
然后我把宿主机里面我的程序设置成DNS模式,把baidu 的 IP 设置成本地环网IP ,再次在虚拟机里面发送请求,
结果很正确,虚拟机里面的程序访问了我虚拟机里面搭建的服务器
感觉问题不大了
最后还有个东西我忘记测试了,重新测试的

就是红色框里面的东西。。。
下面那条 baidu 的信息,是我的程序启动 DNS模式 的时候,我自己解析的
上面那条 baidu 的信息,是我的程序启动 代理模式 的时候,从 8.8.8.8 得到的信息
没什么问题
对了,还有个问题
就是如何设置DNS了,
实际上,设置DNS的方法有三个
写代码,直接设置
写代码启动控制台,调用控制台命令来设置DNS(方便,但是如果没有那个内、外部命令怎么办。。。不考虑)
手动打开本地连接,点属性,手动设置(不考虑)
可以考虑的方法只有第一个了,
据我了解,我知道的设置DNS的Windows API就有2个,这些都不是事。
但是我认为如果真的用程序来设置DNS的话,那这个程序不就真的成DNS劫持的程序了么。
后台偷偷设置了DNS,然后主界面隐藏了,这就是一个DNS劫持的工具,我是不想这么做。所以没有加那么多。
就这样吧。。。留个东西纪录一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」