快速并发检查.co.za域的SOA DNS记录

时间:2009-11-21 02:18:45

标签: c# asp.net dns soa mx-record

我希望通过检查是否存在 SOA ,尽可能准确地实施 .co.za 域名的批量可用性检查使用C#ASP.NET MX记录

我正在寻找一种解决方案,可以检查相关的DNS记录,以便正确利用线程一次检查至少10个域。

“为什么不使用API​​?”

检查.co.za域的可用性的唯一真正准确的方法是使用http://co.za/whois.shtml,但是古老的WHOIS服务不允许批量检查并限制对给定IP的连续检查。

以前的工作

到目前为止,通过使用我的古老经典ASP脚本,利用Emmanuel Kartmann编写的名为“Simple DNS Resolver”的旧DNS库,我已经获得了相当准确的结果。但是,这种方法不能很好地扩展,我需要能够使用正确的线程ASP.NET实现来处理更多用户。

我现在使用的顽皮代码看起来像这样:

Dim oDNS, pDomain, found_names

Set oDNS = CreateObject("Emmanuel.SimpleDNSClient.1")

oDNS.ServerAddresses = "127.0.0.1" // Set DNS server to use
oDNS.Separator = "," // Set separator for found_names multiple outputs

对每个域执行以下操作:

Err.Clear // Reset error flag. I know, I hate it too.

oDNS.Resolve pDomain, found_names, "C_IN", "T_SOA" // Look for SOA records for domain

If Err <> 0 Then // No SOA records could be found.
    Err.Clear // Reset error flag
    oDNS.GetEmailServers pDomain, found_names // Look for MX records
    If Err <> 0 Then // No MX records found either
        AssumeDomainIsAvailable(pDomain);
    Else // Found some MX records
        DomainUnavailable(pDomain);
    End If

Else // Found some SOA records
    DomainUnavailable(pDomain);
End If

任何改进检测的建议都值得赞赏。这是我关于SO的第一个问题,请原谅我的冗长和感谢你的宝贵时间。

2 个答案:

答案 0 :(得分:3)

使用JH Software的DNS Client Library for .NET

非常容易
var Response = JHSoftware.DnsClient.Lookup("example.com", 
                              JHSoftware.DnsClient.RecordType.SOA);

它还支持异步查找的BeginLookup / EndLookup方法。

答案 1 :(得分:0)

如果在网上提供服务 “限制对给定IP的连续检查”,这可能是有充分理由的(保护系统并使投机者的生活更加困难)。称之为“过时”肯定无济于事。

此外,许多DNS请求可能被视为违反服务条款和/或字典攻击,并且可能(免责声明:我不知道co.za的政策)导致黑名单。