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

2016-02-19 11:55 43 1 收藏

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

【 tulaoshi.com - 编程语言 】

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 + "修改成功.";
                  

来源:https://www.tulaoshi.com/n/20160219/1599099.html

延伸阅读
WMI不仅可以获取想要的计算机数据,而且还可以用以远程控制。远程控制计算机不仅是黑客们的梦想,也是大多数网络管理者所渴望得到的,尤其在现代的网络中,每一个网络管理者所面对的局域网,都是由一个庞大的计算机群组成,如果有效的管理网络的每一台计算机就显得格外重要了。目前网络管理软件通常的做法是,在远程计算机上运行客户端后台...
标签: 服务器
新版云服务器快照基本管理操作   快照的基本管理操作包括删除快照和回滚快照操作。 删除快照:选择列表中的快照后,点击蓝框线所示的删除快照按钮。 回滚快照:回滚快照操作只能针对打快照的云磁盘进行回滚。单选列表中的快照后,点击红框线所示的回滚快照按钮。 出现提醒对话框。点击确定后,如果发现云服务器的状...
标签: 服务器
怎么设置dns服务器ip   dns服务器简单的来说,是一个上网输入网址必须经过的服务器,它帮你找到网站 上面的是比较复杂的,故意的,看懂的话,你就知道什么是的 DNS分为客户端(Client)和服务器(Server),客户端扮演发问的角色,也就是问服务器一个域名(Domain Name),而服务器必须要回答此域名的真正IP地址,DNS是怎么来...
//希望通过这篇文章,你可以用C#写出自己的Email客户端程序 This is a follow up to my SMTP example that shows how to access your POP3 server. This program connects and logs on to your POP3 server, and checks to see how many new messages you have. The instantiation of the POP is in Main() like this: POP pop = new POP(...
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; using Microsoft.Win32; namespace server { /**//// /// Form1 的摘要说明。 /// public class Form1...

经验教程

172

收藏

75
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部