如何以编程方式添加DNS别名?

时间:2010-09-03 02:04:59

标签: c# dns

我想在Microsoft的DNS服务器中创建一个别名记录,将AliasA指向ComputerA。我该如何以编程方式执行此操作?

2 个答案:

答案 0 :(得分:2)

我使用WMI来做这件事,在网上找到了一个例子,这就是它的样子。

   private ManagementScope _session = null;

   public ManagementPath CreateCNameRecord(string DnsServerName, string ContainerName, string OwnerName, string PrimaryName)
    {
        _session = new ManagementScope("\\\\" + DnsServerName+ "\\root\\MicrosoftDNS", con);
        _session.Connect();

        ManagementClass zoneObj = new ManagementClass(_session, new ManagementPath("MicrosoftDNS_CNAMEType"), null);
        ManagementBaseObject inParams = zoneObj.GetMethodParameters("CreateInstanceFromPropertyData");
        inParams["DnsServerName"] = ((System.String)(DnsServerName));
        inParams["ContainerName"] = ((System.String)(ContainerName));
        inParams["OwnerName"] = ((System.String)(OwnerName));
        inParams["PrimaryName"] = ((System.String)(PrimaryName));
        ManagementBaseObject outParams = zoneObj.InvokeMethod("CreateInstanceFromPropertyData", inParams, null);

        if ((outParams.Properties["RR"] != null))
        {
            return new ManagementPath(outParams["RR"].ToString());
        }

        return null;
    }

答案 1 :(得分:0)

我认为.NET没有任何东西可以提供对这些内容的访问(我可以通过一些快速搜索找到对专有库,控件等的引用),所以你可能不得不使用Win32 API通过P / Invoke(虽然另一种可能性是通过WMI完成工作)。

您从DnsAcquireContextHandle开始,然后(可能)DnsQuery获取当前记录集,修改其内容以添加新别名DnsReplaceRecordSet以使DNS服务器使用新的记录集,最后DnsReleaseContextHandle关闭了。

当然,您需要在服务器上拥有正确的权限,否则这些权限都不会起作用。