C#利用WMI操作DNS服务器(可远程操作,需要相应权限)

西瓜小二郎90

西瓜小二郎90

2016-02-19 11:55

下面是个超简单的C#利用WMI操作DNS服务器(可远程操作,需要相应权限)教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace Yaosansi
{
    class Test
    {
        static void Main()
        {
            MyDnsTEST();
        }

    /// summary
    /// MyDnsTEST功能测试
  /// C#利用WMI操作DNS服务器(可远程操作,需要相应权限)
    /// Author:yaosansi 
    /// Create Date:2005-09-07
    /// Modify Date:2006-10-25
    /// Site:http://www.yaosansi.com/
    /// E-mail:yaosansi at 126 dot com
    /// http://www.yaosansi.com/blog/article.asp?id=935
    /// http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html
    /// 注意:此版本为WINDOWS2003 DNS服务器专用.不适合其它版本操作系统.
    /// /summary
        static void MyDnsTEST()
        {
            Yaosansi.Net.MYDNS dns = new Yaosansi.Net.MYDNS();
            //===========================================
            //不对以下三个属性赋值默认DNS服务器为本机.
            dns.ServerName = "202.96.64.68";
            dns.userName = "Administrator";
            dns.passWord = "123456789";
            //===========================================
            //dns.CreateZone("yaosansi.com");
            //dns.DelZone("yaosansi.com");
            //dns.CreateAType("yaosansi.com", "www", "2.2.2.2", "3600");
            //dns.ModifyAType("yaosansi.com","www","127.21.0.1","800");
            //dns.DelAType("yaosansi.com", "mail");
            //dns.CreateMXType("mail", "yaosansi.com", "5.5.5.5", "20", "3600");
            //dns.ModifyMXType("mail", "yaosansi.com", "36000", "218.1.1.1", "26");
            //dns.DelMXType("mail", "yaosansi.com");
            //dns.CreateCNAMEType("mpq2", "yaosansi.com", "www.yaosansi.com", "3900");
            //dns.ModifyCNAMEType("mpq2", "abc.com", "30520", "www.yaosansi.com.");
            //dns.DelCNAMEType("mpq", "yaosansi.com");

            //DataTable table = dns.ListExistsMXType("yaosansi.com");
            DataTable table = dns.ListExistsAType("yaosansi.com");
            //DataTable table = dns.ListExistsCNAMEType("yaosansi.com");
            Yaosansi.Data.DataHelp.PrintTable(table);

            if (!string.IsNullOrEmpty(dns.ErrMessage))
            {
                Console.WriteLine("--------------------------------------------------");
                Console.WriteLine("返回信息:" + dns.ErrMessage);
                Console.WriteLine("--------------------------------------------------");
            }
            Console.WriteLine("");
            Console.WriteLine("===End===");
            Console.ReadLine();
        }
    }
}





using System;
using System.Management;
using System.Data;

namespace Yaosansi.Net
{
    /// summary
    /// C#利用WMI操作DNS服务器(可远程操作,需要相应权限)
    /// Author:yaosansi 
    /// Create Date:2005-09-07
    /// Modify Date:2006-10-25
    /// Site:http://www.yaosansi.com/
    /// E-mail:yaosansi at 126 dot com
    /// http://www.yaosansi.com/blog/article.asp?id=935
    /// http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html
    /// 注意:此版本为WINDOWS2003 DNS服务器专用.不适合其它版本操作系统.
    /// /summary
    public class MYDNS
    {
        //要连接的DNS服务器
        private string sServerPath;
        //用户名
        private string username = null;
        //密码
        private string password = null;
        //服务器名称或IP地址
        private string DNSName = null;
        //表示管理操作的范围.这里是用来执行DNS的命名空间
        private ManagementScope DNS;
        //用于返回检索的ManagementObject集合
        private System.Management.ManagementObjectCollection Q;
        //
        private ManagementClass DnsClass;
        //
        private ManagementBaseObject MI;

        /// summary
        /// 返回的操作信息.
        /// /summary
        private string errMessage=null;

        /// summary
        /// 获取错误信息.
        /// /summary
        public string ErrMessage
        {
            get
            {
                return errMessage;
            }
        }
        /// summary
        /// 设置DNS服务器名称或IP地址
        /// /summary
        public string ServerName
        {
            set
            {
                this.sServerPath = string.Format(@"\{0}rootMicrosoftDNS", value);
                this.DNSName = value;
            }
        }

        /// summary
        /// 设置连接服务器的用户名(指定服务器IP,用户和密码后将自动连接远程服务器,本机不需要指定)
        /// /summary
        public string userName
        {
            set
            {
                this.username = value;
            }
        }

        /// summary
        /// 设置连接服务器的密码(指定服务器IP,用户和密码后将自动连接远程服务器,本机不需要指定)
        /// /summary
        public string passWord
        {
            set
            {
                this.password = value;
            }
        }

        /// summary
        /// 构造函数
        /// /summary
        public MYDNS()
        {
            sServerPath = @"\localhostrootMicrosoftDNS";
            DNSName = "localhost";
        }



        /// summary
        /// 建立对象.连接
        /// /summary
        /// param name="DnsType"DNS类型 MicrosoftDNS_Zone等/param
        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);
        }

        /// summary
        /// 查询DNS并建立对象
        /// /summary
        /// param name="query"WQL查询语句/param
        ///  param name="DnsType"DNS类型 MicrosoftDNS_Zone等/param
        /// returns/returns
        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();
        }

        /// summary
        /// 仅查询DNS
        /// /summary
        /// param name="query"WQL查询语句/param
        /// returns/returns
        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();
        }


        /// summary
        /// 判断区域是否存在
        /// /summary
        /// param name="domain"区域名称/param
        /// returns/returns
        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;
            }

        }




        /// summary
        /// 创建一个新的区域,仅区域名称
        /// /summary
        /// param name="domain"区域的名称/param
        public bool CreateZone(string domain)
        {
            try
            {
                this.Create("MicrosoftDNS_Zone");
                //如果区域已经存在
                if (IsExistsZone(domain))
                {
                    errMessage = "域:"+domain+"已经存在.";
                    return false;
                }
                //建立新的区域
                this.MI = DnsClass.GetMethodParameters("CreateZone");
                this.MI["ZoneName"] = domain;
                this.MI["ZoneType"] = 0;

                ManagementBaseObject OutParams = this.DnsClass.InvokeMethod("CreateZone", MI, null);
                errMessage = "域:"+domain+"创建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

        }


        /// summary
        /// 创建一个区域,包括其它参数
        /// /summary
        /// param name="domain"要创建的区域名称/param
        /// param name="ZoneType"Type of zone. Valid values are the following:0 Primary zone. 1 Secondary zone.  2 Stub zone. 3 Zone forwarder. /param
        /// param name="DataFileName"[in, optional] Name of the data file associated with the zone/param
        /// param name="IpAddr"[in, optional] IP address of the mater DNS Server for the zone. /param
        /// param name="AdminEmailName"[in, optional] Email address of the administrator responsible for the zone/param
        /// returns/returns
        public bool CreateZone(string domain, uint ZoneType, string DataFileName, string[] IpAddr, string AdminEmailName)
        {
            try
            {
                this.Create("MicrosoftDNS_Zone");
                //如果区域已经存在
                if (IsExistsZone(domain))
                {
                    errMessage = "域:" + domain + "已经存在.";
                    return false;
                }
                //建立新的区域
                MI = DnsClass.GetMethodParameters("CreateZone");
                MI["ZoneName"] = domain;
                MI["ZoneType"] = ZoneType;
                MI["DataFileName"] = DataFileName;
                MI["IpAddr"] = IpAddr;
                MI["AdminEmailName"] = AdminEmailName;
                ManagementBaseObject OutParams = this.DnsClass.InvokeMethod("CreateZone", MI, null);
                errMessage = "域:" + domain + "创建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

        }


        /// summary
        /// 修改区域
        /// /summary
        /// param name="domain"要修改的区域名称/param
        /// param name="ZoneType"Type of zone. Valid values are the following:0 Primary zone. 1 Secondary zone.  2 Stub zone. 3 Zone forwarder. /param
        /// param name="DataFileName"[in, optional] Name of the data file associated with the zone/param
        /// param name="IpAddr"[in, optional] IP address of the mater DNS Server for the zone. /param
        /// param name="AdminEmailName"[in, optional] Email address of the administrator responsible for the zone/param
        /// returns/returns
        public bool ChangeZoneType(string domain, uint ZoneType, string DataFileName, string[] IpAddr, string AdminEmailName)
        {
            try
            {
                Q = QueryDNS("Select * From MicrosoftDNS_ZONE where ContainerName='" + domain + "'", "MicrosoftDNS_Zone");

                foreach (ManagementObject oManObject in Q)
                {
                    MI = oManObject.GetMethodParameters("ChangeZoneType");
                    MI["ZoneType"] = ZoneType;
                    MI["DataFileName"] = DataFileName;
                    MI["IpAddr"] = IpAddr;
                    MI["AdminEmailName"] = AdminEmailName;
                    oManObject.InvokeMethod("ChangeZoneType", MI, null);
                    errMessage = "域:" + domain + "修改成功.";
                    return true;
                }
                errMessage = "未找到域:"+domain;
                return false;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }
        }

        /// summary
        /// 删除区域
        /// /summary
        /// param name="domain"要册除的区域的名称/param
        /// returns/returns
        public bool DelZone(string domain)
        {
            try
            {
                Q = QueryDNS("Select * From MicrosoftDNS_ZONE where ContainerName='" + domain + "'", "MicrosoftDNS_Zone");
                foreach (ManagementObject oManObject in Q)
                {
                    oManObject.Delete();
                    errMessage = "域:" + domain + "删除成功.";
                    return true;
                }
                errMessage = "未找到域:" + domain;
                return false;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

        }

        /// summary
        /// 判断在某MicrosoftDNS_AType是否在指定的域中存在
        /// /summary
        /// param name="domain"/param
        /// param name="OwnerName"/param
        /// returns/returns
        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)
                {
                    //Console.WriteLine(oManObject["OwnerName"].ToString());
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }
        }


        /// summary
        /// 创建MicrosoftDNS_AType 
        /// /summary
        /// param name="ContainerName"Name of the Container for the Zone, Cache, or RootHints instance which contains this RR/param
        /// param name="HostName"主机名 [如果为空或NULL,主机名将与域名保持一致.]/param
        /// param name="TTL"Time, in seconds, that the RR can be cached by a DNS resolver/param
        /// param name="IPAddress"String representing the IPv4 address of the host/param
        /// returns/returns
        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))
                {
                    Console.WriteLine("区域:{0}不存在,创建失败", ContainerName);
                    errMessage = string.Format("区域:{0}不存在,创建失败", ContainerName);
                    return false;
                }
                if (IsExistsAType(ContainerName, OwnerName))
                {
                    Console.WriteLine("{0}中已存在{1},创建失败", ContainerName, OwnerName);
                    errMessage = string.Format("{0}中已存在{1},创建失败", ContainerName, OwnerName);
                    return false;
                }
                MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
                MI["DnsServerName"] = "localhost";
                MI["ContainerName"] = ContainerName;
                MI["OwnerName"] = OwnerName;
                MI["IPAddress"] = IPAddress;
                if (string.IsNullOrEmpty(TTL))
                {
                    TTL = "3600";
                }
                MI["TTL"] =TTL;
                DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
                errMessage = "A记录:" + OwnerName + "创建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

        }


        /// summary
        /// 创建MicrosoftDNS_AType 
        /// /summary
        /// param name="DnsServerName"FQDN or IP address of the DNS Server that contains this RR/param
        /// param name="ContainerName"Name of the Container for the Zone, Cache, or RootHints instance which contains this RR/param
        /// param name="HostName"主机名 [如果为空或NULL,主机名将与域名保持一致.]/param
        /// param name="RecordClass"Class of the RR. Default value is 1. The following values are valid.1 IN (Internet) 2 CS (CSNET)  3 CH (CHAOS) 4 HS (Hesiod) /param
        /// param name="TTL"Time, in seconds, that the RR can be cached by a DNS resolver/param
        /// param name="IPAddress"String representing the IPv4 address of the host/param
        /// returns/returns
        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))
                {
                    Console.WriteLine("区域:{0}不存在,创建失败", ContainerName);
                    errMessage = string.Format("区域:{0}不存在,创建失败", ContainerName);
                    return false;
                }
                if (IsExistsAType(ContainerName, OwnerName))
                {
                    Console.WriteLine("{0}中已存在{1},创建失败", ContainerName, OwnerName);
                    errMessage=string.Format("{0}中已存在{1},创建失败", ContainerName, OwnerName);
                    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 = "A记录:" + OwnerName + "创建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

        }


        /// summary
        /// 修改MicrosoftDNS_AType 
        /// /summary
        /// param name="ContainerName"Name of the Container for the Zone, Cache, or RootHints instance which contains this RR/param
        /// param name="HostName"主机名 [如果为空或NULL,主机名将与域名保持一致.]/param
        /// param name="TTL"Time, in seconds, that the RR can be cached by a DNS resolver/param
        /// param name="IPAddress"/param
        /// returns/returns
        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))
                {
                    Console.WriteLine("区域:{0}不存在,修改失败", ContainerName);
                    errMessage = string.Format("区域:{0}不存在,修改失败", ContainerName);
                    return false;
                }
                if (!IsExistsAType(ContainerName, OwnerName))
                {
                    Console.WriteLine("{0}中不存在{1},修改失败", ContainerName, OwnerName);
                    errMessage = string.Format("{0}中不存在{1},修改失败", ContainerName, OwnerName);
                    return false;
                }


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

                foreach (ManagementObject oManObject in Q)
                {
                    //foreach (PropertyData p in oManObject.Properties)
                    //{
                    //    try
                    //    { Console.WriteLine(p.Name+"="+oManObject[p.Name]); }
                    //    catch
                    //    { }
                    //}
                    if (oManObject["IPAddress"].ToString() == IPAddress)
                    {
                        errMessage = "A记录:" + OwnerName + "修改失败,必须修改IP地址.";
                        return false;
                    }

                    MI = oManObject.GetMethodParameters("Modify");
                    MI["IPAddress"] = IPAddress;
                    MI["TTL"] = TTL;
                    oManObject.InvokeMethod("Modify", MI, null);
                    errMessage = "A记录:" + OwnerName + "修改成功.";
                  
展开更多 50%)
分享

猜你喜欢

C#利用WMI操作DNS服务器(可远程操作,需要相应权限)

编程语言 网络编程
C#利用WMI操作DNS服务器(可远程操作,需要相应权限)

云服务器基本操作管理

服务器
云服务器基本操作管理

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用C#实现Web服务器

编程语言 网络编程
用C#实现Web服务器

利用Visual C#编程模拟鼠标操作

编程语言 网络编程
利用Visual C#编程模拟鼠标操作

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

DNS服务器工作原理

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
DNS服务器工作原理

新版云服务器基本管理操作

服务器
新版云服务器基本管理操作

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Excel2010中学会制作精美的循环图层

Excel2010中学会制作精美的循环图层

PPT色彩搭配的一些心得

PPT色彩搭配的一些心得
下拉加载更多内容 ↓