好多东西都没写,好多东西都是半吊子工程
花了半宿的时间,把我的 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劫持的工具,我是不想这么做。所以没有加那么多。
就这样吧。。。留个东西纪录一下。