C#实现DNS解析服务
2013-06-07 20:13
846 查看
该DNS解析服务需用到开源控件库:ARSoft.Tools.Net。首先简单介绍一下ARSoft.Tools.Net,ARSoft.Tools.Net是一个非常强大的开源DNS控件库,包含.Net SPF validation, SenderID validation以及DNS Client、DNS Server接口。使用该接口可轻松实现DNS客户请求端及服务器解析端。其下载地址:http://arsofttoolsnet.codeplex.com/。
using ARSoft.Tools.Net.Dns; //添加引用
DnsServer端完成,我们可以在此基础上扩展其功能,如不解析在黑名单中的IP、将可能为攻击的ip加入黑名单、以及创建缓存,加速DNS的解析、智能解析等等。
DNS Client端实现
代码如下:using ARSoft.Tools.Net.Dns; //添加引用
//初始化DnsClient,第一个参数为DNS服务器的IP,第二个参数为超时时间 DnsClient dnsClient = new DnsClient(IPAddress.Parse("127.0.0.1"), QUERY_TIMEOUT); //解析域名。将域名请求发送至DNS服务器解析,第一个参数为需要解析的域名,第二个参数为 解析类型, RecordType.A为IPV4类型 DnsMessage dnsMessage = dnsClient.Resolve("www.sina.com", RecordType.A); //若返回结果为空,或者存在错误,则该请求失败。 if (dnsMessage == null || (dnsMessage.ReturnCode != ReturnCode.NoError && dnsMessage.ReturnCode != ReturnCode.NxDomain)) { return null; } else { //循环遍历返回结果,将返回的IPV4记录添加到结果集List中。 foreach (DnsRecordBase dnsRecord in dnsMessage.AnswerRecords) { ARecord aRecord = dnsRecord as ARecord; if (aRecord != null) resultIpList.Add(aRecord.Address.ToString()); else continue; } }至此,一个简单的客户端已经完成,我们可以通过该程序不断地向DNS发起解析请求,如果发送的数据量足够大,就可能造成DNS服务器瘫痪,这就是我们常说的DOS攻击。
DNS Server端实现
代码如下://初始化DnsServer,第一个参数ipAddress为监听的本地ip地址,第二个参数为UDP的并发处理数,第三个参数为TCP的并发处理数,第四个参数为一个委托,通过该委托我们可以自定义解析返回结果 DnsServer dnsServer = new DnsServer(ipAddress, maxConnection, maxConnection, this.ProcessQuery); dnsServer.Start(); //委托实现方法,可自定义解析规则 private DnsMessageBase ProcessQuery(DnsMessageBase message, IPAddress clientAddress, ProtocolType protocol) { message.IsQuery = false; DnsMessage query = message as DnsMessage; if (query == null || query.Questions.Count <= 0) message.ReturnCode = ReturnCode.ServerFailure; else { if (query.Questions[0].RecordType == RecordType.A) { //自定义解析规则,clientAddress即客户端的IP,dnsQuestion.Name即客户端请求的域名,Resolve为自定义的方法(代码不再贴出),返回解析后的ip,将其加入AnswerRecords中 foreach (DnsQuestion dnsQuestion in query.Questions) { string resolvedIp = Resolve(clientAddress.ToString(), dnsQuestion.Name); ARecord aRecord = new ARecord(query.Questions[0].Name, 36000, ipAddress); query.AnswerRecords.Add(aRecord); } } else //如果为IPV6请求,则交给上级DNS服务器处理,代码不再贴出 } return message; }
DnsServer端完成,我们可以在此基础上扩展其功能,如不解析在黑名单中的IP、将可能为攻击的ip加入黑名单、以及创建缓存,加速DNS的解析、智能解析等等。
总结
ARSoft.Tools.Net是一个比较强大的开源工具库,其功能不仅仅只是以上两个方面,同时还包含有其他功能,读者可以自己查看源代码学习。相关文章推荐
- C#实现DNS解析服务
- C#实现DNS解析服务和智能DNS服务
- 使用bind自建DNS服务,实现双DNS服务器主从复制、子域授权、转发、智能解析等效果
- RedHat 6配置DNS服务实现主从同步与正反向解析 推荐
- 一个.NET通用JSON解析/构建类的实现(c#)
- C#实现多线程时如何将底层服务与界面表现分离?
- lamp架构---基于DNS轮询解析结合nfs共享存储实现web应用
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- C#回车切换焦点实现实例解析
- 通过bind实现DNS服务
- C# 实现 使用OAuth2.0 登录 Google 服务
- CentOS6服务管理之DNS-RNDC管理DNS的实现
- asp.net(c#)用Ajax调用web 服务实现省市县三级联动
- DNS服务之反向解析&子域&区域转发
- [转]在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)
- 《搭建DNS内外网的解析服务》RHEL6
- C#实现Windows 服务的制作安装和删除
- 【转】C# 高性能 TCP 服务的多种实现方式
- C#发送邮件的实现实例解析