zoukankan      html  css  js  c++  java
  • .net 实现对DNS服务器的管理

    最近在做一个虚拟机的web管理系统,中间遇到一个问题,就是新建的虚拟机不能通过主机名访问,原因是DNS出了问题,没有对应的主机名和IP地址的记录,网络这边暂时又解决不了,只能把这个问题交给我们,让我们通过程序来实现记录的添加与删除了。

    解决方案:

    1)通过powershell编程来实现。

    2)用.net编程来实现。

    我找了下.net关于DNS的类库,但没有相应的方法,只能通过WMI编程来间接实现了。 

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Management;
    using System.Data;

    namespace TestDNS
    {
       
    public  class DNSManage
        {
            
    #region filed
            
    private string sServerPath;

            
    private string username = null;

            
    private string password = null;

            
    private string DNSName = null;

            
    private ManagementScope DNS;

            
    private System.Management.ManagementObjectCollection Q;

            
    private ManagementClass DnsClass;

            
    private ManagementBaseObject MI;


            
    private string errMessage = null;
            
            
    #endregion

            
    #region property
            
    public string ErrMessage
            {
                
    get
                {
                    
    return errMessage;
                }
            }

            
    public string ServerName
            {
                
    set
                {
                    
    this.sServerPath = string.Format(@"\\{0}\root\MicrosoftDNS", value);
                    
    this.DNSName = value;
                }
            }


            
    public string userName
            {
                
    set
                {
                    
    this.username = value;
                }
            }


            
    public string passWord
            {
                
    set
                {
                    
    this.password = value;
                }
            } 
            
    #endregion


           
    public DNSManage()
           {
               sServerPath 
    = @"\\localhost\root\MicrosoftDNS";
               DNSName 
    = "localhost";
           }

           
    public ManagementObjectCollection QueryDNS(string query)
           {
               
    if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
               {
                   System.Management.ConnectionOptions Conn 
    = new ConnectionOptions();
                   Conn.Username 
    = username;
                   Conn.Password 
    = password;
                   DNS 
    = new ManagementScope(sServerPath, Conn);
               }
               
    else
               {
                   DNS 
    = new ManagementScope(sServerPath);
               }
               
    if (!DNS.IsConnected)
               {
                   DNS.Connect();
               }
               System.Management.ManagementObjectSearcher QS 
    = new ManagementObjectSearcher(DNS, new ObjectQuery(query));
               QS.Scope 
    = DNS;
               
    return QS.Get();
           }
           
    public ManagementObjectCollection QueryDNS(string query, string DnsType)
           {
               
    this.Create(DnsType);
               System.Management.ManagementObjectSearcher QS 
    = new ManagementObjectSearcher(DNS, new ObjectQuery(query));
               QS.Scope 
    = DNS;
               
    return QS.Get();
           }
           
    private void Create(string DnsType)
           {
               
    if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
               {
                   System.Management.ConnectionOptions Conn 
    = new ConnectionOptions();
                   Conn.Username 
    = username;
                   Conn.Password 
    = password;
                   DNS 
    = new ManagementScope(sServerPath, Conn);
               }
               
    else
               {
                   DNS 
    = new ManagementScope(sServerPath);
               }
               
    if (!DNS.IsConnected)
               {
                   DNS.Connect();
               }
               ManagementPath Path 
    = new ManagementPath(DnsType);
               
    this.DnsClass = new ManagementClass(DNS, Path, null);
           }

           
    public bool IsExistsZone(string domain)
           {

               
    try
               {
                   Q 
    = QueryDNS("Select * From MicrosoftDNS_ZONE where ContainerName='" + domain + "'");
                   
    foreach (ManagementObject oManObject in Q)
                   {
                       
    //Console.WriteLine(oManObject["ContainerName"].ToString());
                       return true;
                   }
                   
    return false;
               }
               
    catch (Exception e)
               {
                   errMessage 
    = e.Message;
                   Console.WriteLine(e.ToString());
                   
    return false;
               }

           }
      
           
    public bool IsExistsAType(string domain, string OwnerName)
           {
               
    try
               {
                   Q 
    = QueryDNS("Select * From MicrosoftDNS_AType where OwnerName='" + OwnerName + "' and ContainerName='" + domain + "'");
                   
    foreach (ManagementObject oManObject in Q)
                   {
                       
                       
    return true;
                   }
                   
    return false;
               }
               
    catch (Exception e)
               {
                   errMessage 
    = e.Message;
                   Console.WriteLine(e.ToString());
                   
    return false;
               }
           }

     
           
    public bool CreateAType(string ContainerName, string HostName, string IPAddress, string TTL)
           {
               
    try
               {
                   
    string OwnerName = null;
                   
    if (string.IsNullOrEmpty(HostName))
                   {
                       OwnerName 
    = ContainerName;
                   }
                   
    else
                   {
                       OwnerName 
    = HostName + "." + ContainerName;
                   }
                   
    this.Create("MicrosoftDNS_AType");
              
                   
    if (!IsExistsZone(ContainerName))
                   {
                      
                       errMessage 
    = string.Format("domain:{0} is not exist", ContainerName);
                       
    return false;
                   }
                   
    if (IsExistsAType(ContainerName, OwnerName))
                   {

                       errMessage 
    = string.Format("{0} exist in {1}", OwnerName, ContainerName);
                       
    return false;
                   }
                   MI 
    = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
                   MI[
    "DnsServerName"= DNSName;
                   MI[
    "ContainerName"= ContainerName;
                   MI[
    "OwnerName"= OwnerName;
                   MI[
    "IPAddress"= IPAddress;
                   
    if (string.IsNullOrEmpty(TTL))
                   {
                       TTL 
    = "3600";
                   }
                   MI[
    "TTL"= TTL;
                   DnsClass.InvokeMethod(
    "CreateInstanceFromPropertyData", MI, null);
                   errMessage 
    = "add " + OwnerName + " success.";
                   
    return true;
               }
               
    catch (Exception e)
               {
                   errMessage 
    = e.Message;
                   Console.WriteLine(e.ToString());
                   
    return false;
               }

           }


           
    public bool CreateAType(string DnsServerName, string ContainerName, string HostName, uint RecordClass, uint TTL, string IPAddress)
           {
               
    try
               {
                   
    string OwnerName = null;
                   
    if (string.IsNullOrEmpty(HostName))
                   {
                       OwnerName 
    = ContainerName;
                   }
                   
    else
                   {
                       OwnerName 
    = HostName + "." + ContainerName;
                   }
                   
    this.Create("MicrosoftDNS_AType");
               
                   
    if (!IsExistsZone(ContainerName))
                   {

                       errMessage 
    = string.Format("domain:{0} is not exist", ContainerName);
                       
    return false;
                   }
                   
    if (IsExistsAType(ContainerName, OwnerName))
                   {
                       errMessage 
    = string.Format("{0} exist in {1}", OwnerName, ContainerName);
                       
    return false;
                   }
                   MI 
    = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
                   MI[
    "DnsServerName"= DnsServerName;
                   MI[
    "ContainerName"= ContainerName;
                   MI[
    "OwnerName"= OwnerName;
                   MI[
    "RecordClass"= RecordClass;
                   MI[
    "TTL"= TTL;
                   MI[
    "IPAddress"= IPAddress;
                   DnsClass.InvokeMethod(
    "CreateInstanceFromPropertyData", MI, null);
                   errMessage 
    = "add " + OwnerName + " success.";
                   
    return true;
               }
               
    catch (Exception e)
               {
                   errMessage 
    = e.Message;
                   Console.WriteLine(e.ToString());
                   
    return false;
               }

           }


           
    public bool ModifyAType(string ContainerName, string HostName, string IPAddress, string TTL)
           {
               
    try
               {
                   
    string OwnerName = null;
                   
    if (string.IsNullOrEmpty(HostName))
                   {
                       OwnerName 
    = ContainerName;
                   }
                   
    else
                   {
                       OwnerName 
    = HostName + "." + ContainerName;
                   }

                  
                   
    if (!IsExistsZone(ContainerName))
                   {

                       errMessage 
    = string.Format("domain:{0} is not exist", ContainerName);
                       
    return false;
                   }
                   
    if (!IsExistsAType(ContainerName, OwnerName))
                   {
                       errMessage 
    = string.Format("{0} not exist in {1}", OwnerName, ContainerName);
                       
    return false;
                   }


                   Q 
    = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'""MicrosoftDNS_AType");

                   
    foreach (ManagementObject oManObject in Q)
                   {

                       
    if (oManObject["IPAddress"].ToString() == IPAddress)
                       {
                           errMessage 
    =  OwnerName + " ipaddress is same.";
                           
    return false;
                       }

                       MI 
    = oManObject.GetMethodParameters("Modify");
                       MI[
    "IPAddress"= IPAddress;
                       MI[
    "TTL"= TTL;
                       oManObject.InvokeMethod(
    "Modify", MI, null);
                       errMessage 
    = "modify " + OwnerName + " success.";
                       
    return true;
                   }
                   errMessage 
    = string.Format("{0} failed", OwnerName);
                   
    return false;
               }
               
    catch (Exception e)
               {
                   errMessage 
    = e.Message;
                   Console.WriteLine(e.ToString());
                   
    return false;
               }
           }

           
    public bool DelAType(string ContainerName, string HostName)
           {
               
    try
               {
                   
    string OwnerName = null;
                   
    if (string.IsNullOrEmpty(HostName))
                   {
                       OwnerName 
    = ContainerName;
                   }
                   
    else
                   {
                       OwnerName 
    = HostName + "." + ContainerName;
                   }

                
                   
    if (!IsExistsZone(ContainerName))
                   {

                       errMessage 
    = string.Format("domain:{0} is not exist", ContainerName);
                       
    return false;
                   }
                   
    if (!IsExistsAType(ContainerName, OwnerName))
                   {

                       errMessage 
    = string.Format("{0} not exist in {1}", OwnerName, ContainerName);
                       
    return false;
                   }

                   Q 
    = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'""MicrosoftDNS_AType");

                   
    foreach (ManagementObject oManObject in Q)
                   {
                       oManObject.Delete();
                      
                       
    return true;
                   }
                   errMessage 
    = string.Format("{0}:{1},error", ContainerName, OwnerName);
                   
    return false;
               }
               
    catch (Exception e)
               {
                   errMessage 
    = e.Message;
                   Console.WriteLine(e.ToString());
                   
    return false;
               }
           }


           
    public DataTable ListExistsAType(string ContainerName)
           {

               DataTable table 
    = new DataTable("MicrosoftDNS_AType" + ContainerName);
               table.Columns.Add(
    "OwnerName");
               table.Columns.Add(
    "IPAddress");
               table.Columns.Add(
    "TTL");
               
    try
               {
                   Q 
    = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "'");

                   
    foreach (ManagementObject oManObject in Q)
                   {
                       
    try
                       {
                           DataRow row 
    = table.NewRow();
                           row[
    "OwnerName"= oManObject["OwnerName"];
                           row[
    "IPAddress"= oManObject["IPAddress"];
                           row[
    "TTL"= oManObject["TTL"];
                           table.Rows.Add(row);
                       }
                       
    catch (Exception e)
                       {
                           Console.WriteLine(e.ToString());
                       }
                   }
               }
               
    catch (Exception e)
               {
                   errMessage 
    = e.Message;
                   Console.WriteLine(e.ToString()); 
               }
            
              
               
    return table;
           }

           
    public bool Test(string ContainerName, string HostName, string IPAddress)
           {
               
    string TTL = "3600";
               
    try
               {
                   
    string OwnerName = null;
                   
    if (string.IsNullOrEmpty(HostName))
                   {
                       OwnerName 
    = ContainerName;
                   }
                   
    else
                   {
                       OwnerName 
    = HostName + "." + ContainerName;
                   }


                   
    if (!IsExistsZone(ContainerName))
                   {

                       errMessage 
    = string.Format("domain:{0} is not exist", ContainerName);
                       
    return false;
                   }
                   
    if (!IsExistsAType(ContainerName, OwnerName))
                   {
                       
    this.CreateAType(ContainerName, HostName, IPAddress, TTL);
                       
    return true;
                   }


                   Q 
    = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'""MicrosoftDNS_AType");

                   
    foreach (ManagementObject oManObject in Q)
                   {

                       
    if (oManObject["IPAddress"].ToString() == IPAddress)
                       {
                           errMessage 
    = OwnerName + " ipaddress is not be modifid.";
                           
    return false;
                       }

                       MI 
    = oManObject.GetMethodParameters("Modify");
                       MI[
    "IPAddress"= IPAddress;
                       MI[
    "TTL"= TTL;
                       oManObject.InvokeMethod(
    "Modify", MI, null);
                       errMessage 
    = "modify " + OwnerName + " success.";
                       
    return true;
                   }
                   errMessage 
    = string.Format("{0} failed", OwnerName);
                   
    return false;
               }
               
    catch (Exception e)
               {
                   errMessage 
    = e.Message;
                   Console.WriteLine(e.ToString());
                   
    return false;
               }

               
    return false;
           }


        }
    }

    这个是我好不容易从网上搜到的,大家也可以参考http://www.jb51.net/article/8045.htm

  • 相关阅读:
    加载图片出现403的问题
    js字符串首字母大写的不同写法
    vue中使用两个window.onresize问题解决
    vue备用
    vue注册全局组件
    Java中Timer的用法
    笔记本设置wifi热点
    UVA 11401 Triangle Counting
    数论专题---除法表达式之高精度运算,扩展欧几里得算法
    能被2、3、4、5、6、7、8、9整除数的特征
  • 原文地址:https://www.cnblogs.com/valin/p/1652234.html
Copyright © 2011-2022 走看看