2

我想通过使用 C# ASP.NET检查SOAMX 记录的存在,尽可能准确地实现对.co.za域名的批量可用性检查。

我正在寻找一种可以检查相关 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 的第一个问题,所以请原谅我的冗长并感谢您宝贵的时间。

4

2 回答 2

3

使用 JH Software 的.NET 的 DNS 客户端库,这将非常容易:

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

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

于 2009-11-22T13:21:39.550 回答
0

如果 Web 上提供的服务“限制对给定 IP 的连续检查”,那可能是有充分理由的(既保护系统又使投机者的生活更加困难)。称其为“古老的”当然无济于事。

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

于 2009-11-23T08:23:04.287 回答