技术开发 频道

可支持IPv6的DNS代理增强版实战

  【IT168技术】 DNS是域名系统的缩写。DNS支持使用TCP和UDP协议,使用53号端口。可能是国产教科书的缘故,许多人都不知道DNS还可以在TCP协议上传输。当然,国内的绝大多数DNS服务器都不支持TCP协议。本文讲述如何动手制作一个DNS代理。

  你可能要问我:满世界都是DNS服务器,为什么要写一个DNS代理?

  答案很简单:

  ①某些网络为了节约成本没有架设DNS服务器,需要一个轻量级的解决方案;

  ②升级的DNS代理可以实现一些企业需要的管理功能;

  ③我们国家防火墙看不懂TCP封装的DNS数据;

  ④学习网络协议。

  若你需一个增强版的DNS代理,如可修改DNS请求和回答,可参考使用此开源类库:ARSoft.Tools.Net。

  至于这个DNS代理能给你带来什么,还要由你自己决定。

  本文目标:制作一个稳定、支持TCP和UDP协议的、可强制使用TCP协议请求、支持IPv6的DNS代理。

  既然提到了要支持TCP协议,就简单提一下TCP协议封装和UDP协议封装的差异:UDP是直接传送消息;TCP封装的消息在消息前增加了所跟随消息的长度数据,其占用两个字节,使用大端序作为其字节序。

  那么我们需要做的事情是:

  ①同时监听TCP和UDP的53号端口;

  ②接收到数据就原封不动的转发给外部的DNS服务器;

  ③把DNS服务器返回的数据原封不动的返回给请求者;

  ④继续监听。

  实现代码:

View Code

   调用代码:

using System.Threading;
   namespace SimpleDnsProxy {
     class Program
     {
         static void Main(string[] args)
         {
             DnsProxy.DefaultV4.Start();
             DnsProxy.DefaultV6.Start();
             new ManualResetEvent(false).WaitOne();
         }
     }
 }

  经过许多测试,目前此版本比较稳定。如果能得到类似如下结果,说明本机的DNS代理服务执行正确。

自己做个DNS协议

0
相关文章