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}\root\MicrosoftDNS", 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 = @"\\localhost\root\MicrosoftDNS";
            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 + "修改成功.";
                    return true;
                }
                errMessage = string.Format("{0}中不存在{1},修改失败", ContainerName, OwnerName);
                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>
        /// <returns></returns>
        public bool DelAType(string ContainerName, string HostName)
        {
            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)
                {
                    oManObject.Delete();
                    errMessage = "A记录:" + OwnerName + "删除成功.";
                    return true;
                }
                errMessage = string.Format("{0}中不存在{1},删除失败", ContainerName, OwnerName);
                return false;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }
        }

/// <summary>
        /// 列出某域名下的所有A记录.
        /// </summary>
        /// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
        /// <returns></returns>
        public DataTable ListExistsAType(string ContainerName)
        {
            Yaosansi.IO.Log log = new Yaosansi.IO.Log();
            log.WirteLogTime();
            log.WirteLog(ContainerName);

DataTable table = new DataTable("MicrosoftDNS_AType" + ContainerName);
            table.Columns.Add("主机名 (A)");
            table.Columns.Add("IP 地址");
            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["主机名 (A)"] = oManObject["OwnerName"];
                        row["IP 地址"] = oManObject["IPAddress"];
                        row["TTL"] = oManObject["TTL"];
                        table.Rows.Add(row);
                    }
                    catch (Exception e) { log.WirteLog(e.ToString()); }
                }
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                log.WirteLog(e.ToString());
            }
            Yaosansi.Data.DataHelp.PrintTableLog(table);
            return table;
        }

/// <summary>
        /// 列出某域名下的所有MX记录.
        /// </summary>
        /// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
        /// <returns></returns>
        public DataTable ListExistsMXType(string ContainerName)
        {
            DataTable table = new DataTable("MicrosoftDNS_MXType" + ContainerName);
            table.Columns.Add("邮件交换记录 (MX)");
            table.Columns.Add("目标主机");
            table.Columns.Add("优先级");
            table.Columns.Add("TTL");
            try
            {
                Q = QueryDNS("Select * From MicrosoftDNS_MXType where ContainerName='" + ContainerName + "'");

foreach (ManagementObject oManObject in Q)
                {
                    try
                    {
                        DataRow row = table.NewRow();
                        row["目标主机"] = oManObject["MailExchange"];
                        row["邮件交换记录 (MX)"] = oManObject["OwnerName"];
                        row["优先级"] = oManObject["Preference"];
                        row["TTL"] = oManObject["TTL"];
                        table.Rows.Add(row);
                    }
                    catch { }
                }
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
            }
            return table;
        }

/// <summary>
        /// 列出某域名下的所有别名.
        /// </summary>
        /// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
        /// <returns></returns>
        public DataTable ListExistsCNAMEType(string ContainerName)
        {
            DataTable table = new DataTable("MicrosoftDNS_CNAMEType" + ContainerName);
            table.Columns.Add("别名 (CNAME)");
            table.Columns.Add("别名主机");
            table.Columns.Add("TTL");
            try
            {
                Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType where ContainerName='" + ContainerName + "'");
                foreach (ManagementObject oManObject in Q)
                {
                    try
                    {
                        DataRow row = table.NewRow();
                        row["别名 (CNAME)"] = oManObject["OwnerName"];
                        row["别名主机"] = oManObject["PrimaryName"];
                        row["TTL"] = oManObject["TTL"];
                        table.Rows.Add(row);
                    }
                    catch { }
                }
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
            }
            return table;
        }

/// <summary>
        /// 判断在某MicrosoftDNS_MXType是否在指定的域中存在
        /// </summary>
        /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
        /// <param name="OwnerName">Owner name for the RR. </param>
        /// <returns></returns>
        public bool IsExistsMXType(string ContainerName, string OwnerName)
        {           
            try
            {

Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");

foreach (ManagementObject oManObject in Q)
                {
                  //  Console.WriteLine(oManObject["MailExchange"].ToString());
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }
        }

/// <summary>
        /// 创建MicrosoftDNS_MXType记录(邮件交换记录)
        /// </summary>
        /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>
        /// <param name="ContainerName">主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
        /// <param name="MailExchange">目标主机 FQDN specifying a host willing to act as a mail exchange for the owner name</param>
        /// <param name="Preference">优先级 Preference given to this RR among others at the same owner. Lower values are preferred</param>
        /// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>
        /// <returns></returns>
        public bool CreateMXType(string HostName, string ContainerName,string MailExchange, string Preference, string TTL)
        {
            try
            {
                string OwnerName = null;
                if (string.IsNullOrEmpty(HostName))
                {
                    OwnerName = ContainerName;
                }
                else
                {
                    OwnerName = HostName + "." + ContainerName;
                }

this.Create("MicrosoftDNS_MXType");
                //如果区域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("区域:{0}不存在,创建失败", ContainerName);
                    errMessage = string.Format("区域:{0}不存在,创建失败", ContainerName);
                    return false;
                }
                if (IsExistsMXType(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["RecordClass"] = 1;  //Default value is 1.  //1 IN (Internet)  //2 CS (CSNET)   //3 CH (CHAOS)   //4 HS (Hesiod) 
                MI["MailExchange"] = MailExchange;
                MI["OwnerName"] = OwnerName;
                MI["Preference"] = Preference;

if (string.IsNullOrEmpty(TTL))
                {
                    TTL = "3600";
                }
                MI["TTL"] = TTL;
                DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
                errMessage = "MX记录:" + OwnerName + "创建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

}

/// <summary>
        /// 修改MicrosoftDNS_MXType记录(修改邮件交换记录)
        /// </summary>
        /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>
        /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
        /// <param name="TTL">[in, optional] Time, in seconds, that the RR can be cached by a DNS resolver. </param>
        /// <param name="MailExchange">[in, optional] FQDN specifying a host willing to act as a mail exchange for the owner name. </param>
        /// <param name="Preference">邮件优先级 [in, optional] Preference given to this RR among others at the same owner. Lower values are preferred. </param>
        /// <returns></returns>
        public bool ModifyMXType(string HostName, string ContainerName, string TTL, string MailExchange,string Preference)
        {
            try
            {
                string OwnerName = null;
                if (string.IsNullOrEmpty(HostName))
                {
                    OwnerName = ContainerName;
                }
                else
                {
                    OwnerName = HostName + "." + ContainerName;
                }

this.Create("MicrosoftDNS_MXType");
                //如果区域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("区域:{0}不存在,修改失败", ContainerName);
                    errMessage = string.Format("区域:{0}不存在,修改失败", ContainerName);
                    return false;
                }
                if (!IsExistsMXType(ContainerName, OwnerName))
                {
                    Console.WriteLine("{0}中不存在{1},修改失败", ContainerName, OwnerName);
                    errMessage = string.Format("{0}中不存在{1},修改失败", ContainerName, OwnerName);
                    return false;
                }
                Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'"); 
                foreach (ManagementObject oManObject in Q)
                {
                    MI = oManObject.GetMethodParameters("Modify");
                    if (string.IsNullOrEmpty(TTL))
                    {
                        TTL = "3600";
                    }

if (ClearEndDot(oManObject["MailExchange"].ToString()) == ClearEndDot(MailExchange) && oManObject["Preference"].ToString() == Preference)
                    {
                        errMessage = "MX记录:" + OwnerName + "修改失败,必须修改目标主机或邮件优先级.";
                        return false;
                    }

MI["TTL"] = TTL;
                    MI["MailExchange"] = MailExchange;
                    MI["Preference"] = Preference;
                    oManObject.InvokeMethod("Modify", MI, null);
                    errMessage = "MX记录:" + OwnerName + "修改成功.";
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }
        }

/// <summary>
        /// 删除MicrosoftDNS_MXType
        /// </summary>
        /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>
        /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
        /// <returns></returns>
        public bool DelMXType(string HostName, string ContainerName)
        {
            try
            { 
                string OwnerName = null;
                if (string.IsNullOrEmpty(HostName))
                {
                    OwnerName = ContainerName;
                }
                else
                {
                    OwnerName = HostName + "." + ContainerName;
                }

this.Create("MicrosoftDNS_MXType");
                //如果区域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("区域:{0}不存在,删除失败", ContainerName);
                    errMessage = string.Format("区域:{0}不存在,删除失败", ContainerName);
                    return false;
                }
                if (!IsExistsMXType(ContainerName, OwnerName))
                {
                    Console.WriteLine("{0}中不存在{1},删除失败", ContainerName, OwnerName);
                    errMessage = string.Format("{0}中不存在{1},删除失败", ContainerName, OwnerName);
                    return false;
                }
                Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");

foreach (ManagementObject oManObject in Q)
                {
                    oManObject.Delete();
                    errMessage = "MX记录:" + OwnerName + "删除成功.";
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }
        }

/// <summary>
        /// 判断在某MicrosoftDNS_CNAMEType是否在指定的域中存在
        /// </summary>
        /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
        /// <param name="OwnerName">Owner name for the RR. </param>
        /// <returns></returns>
        public bool IsExistsCNAMEType(string ContainerName, string OwnerName)
        {
            try
            {

Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");

foreach (ManagementObject oManObject in Q)
                {
                    //  Console.WriteLine(oManObject["MailExchange"].ToString());
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }
        }

/// <summary>
        /// 创建MicrosoftDNS_CNAMEType记录(别名)
        /// </summary>
        /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>
        /// <param name="ContainerName">主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
        /// <param name="PrimaryName">in] Primary name of the CNAME RR</param>
        /// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>
        /// <returns></returns>
        public bool CreateCNAMEType(string HostName, string ContainerName, string PrimaryName,  string TTL)
        {
            try
            {
                string OwnerName = null;
                if (string.IsNullOrEmpty(HostName))
                {
                    OwnerName = ContainerName;
                }
                else
                {
                    OwnerName = HostName + "." + ContainerName;
                }

this.Create("MicrosoftDNS_CNAMEType");
                //如果区域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("区域:{0}不存在,创建失败", ContainerName);
                    errMessage = string.Format("区域:{0}不存在,创建失败", ContainerName);
                    return false;
                }
                if (IsExistsCNAMEType(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["RecordClass"] = 1;  //Default value is 1.  //1 IN (Internet)  //2 CS (CSNET)   //3 CH (CHAOS)   //4 HS (Hesiod) 
                MI["PrimaryName"] = PrimaryName;
                MI["OwnerName"] = OwnerName;

if (string.IsNullOrEmpty(TTL))
                {
                    TTL = "3600";
                }
                MI["TTL"] = TTL;
                DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
                errMessage = "CNAME:" + OwnerName + "创建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

}

/// <summary>
        /// 修改MicrosoftDNS_CNAMEType记录(别名)
        /// </summary>
        /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>
        /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
        /// <param name="TTL">[in, optional] Time, in seconds, that the RR can be cached by a DNS resolver. </param>
        /// <param name="PrimaryName">in] Primary name of the CNAME RR</param>
        /// <returns></returns>
        public bool ModifyCNAMEType(string HostName, string ContainerName, string TTL, string PrimaryName)
        {
            try
            {
                string OwnerName = null;
                if (string.IsNullOrEmpty(HostName))
                {
                    OwnerName = ContainerName;
                }
                else
                {
                    OwnerName = HostName + "." + ContainerName;
                }

this.Create("MicrosoftDNS_CNAMEType");
                //如果区域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("区域:{0}不存在,修改失败", ContainerName);
                    errMessage = string.Format("区域:{0}不存在,修改失败", ContainerName);
                    return false;
                }
                if (!IsExistsCNAMEType(ContainerName, OwnerName))
                {
                    Console.WriteLine("{0}中不存在{1},修改失败", ContainerName, OwnerName);
                    errMessage = string.Format("{0}中不存在{1},修改失败", ContainerName, OwnerName);
                    return false;
                }
                Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
                foreach (ManagementObject oManObject in Q)
                {
                    if (ClearEndDot(oManObject["PrimaryName"].ToString()) == ClearEndDot(PrimaryName))
                    {
                        errMessage = "CName记录:" + OwnerName + "修改失败,必须修改别名主机.";
                        return false;
                    }

MI = oManObject.GetMethodParameters("Modify");
                    if (string.IsNullOrEmpty(TTL))
                    {
                        TTL = "3600";
                    }
                    MI["TTL"] = TTL;
                    MI["PrimaryName"] = PrimaryName;
                    oManObject.InvokeMethod("Modify", MI, null);
                    errMessage = "CNAME:" + OwnerName + "修改成功.";
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }
        }

/// <summary>
        /// 删除MicrosoftDNS_CNAMEType
        /// </summary>
        /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>
        /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
        /// <returns></returns>
        public bool DelCNAMEType(string HostName, string ContainerName)
        {
            try
            {
                string OwnerName = null;
                if (string.IsNullOrEmpty(HostName))
                {
                    OwnerName = ContainerName;
                }
                else
                {
                    OwnerName = HostName + "." + ContainerName;
                }

this.Create("MicrosoftDNS_CNAMEType");
                //如果区域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("区域:{0}不存在,删除失败", ContainerName);
                    errMessage = string.Format("区域:{0}不存在,删除失败", ContainerName);
                    return false;
                }
                if (!IsExistsCNAMEType(ContainerName, OwnerName))
                {
                    Console.WriteLine("{0}中不存在{1},删除失败", ContainerName, OwnerName);
                    errMessage = string.Format("{0}中不存在{1},删除失败", ContainerName, OwnerName);
                    return false;
                }
                Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");

foreach (ManagementObject oManObject in Q)
                {
                    oManObject.Delete();
                    errMessage = "CNAME:" + OwnerName + "删除成功.";
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }
        }

/// <summary>
        /// 去除以.结尾的字符串的.
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private string ClearEndDot(string str)
        {
            string returnStr = str;
            if (!string.IsNullOrEmpty(str))
            {
                int l = str.LastIndexOf(".");
                if (l != -1 && l == str.Length - 1)
                {
                    returnStr = str.Substring(0, str.Length - 1);
                }
            }
            return returnStr;
        }

}
}

(0)

相关推荐

  • C#引用访问权限分析

    本文实例分析了C#引用访问权限问题.分享给大家供大家参考.具体分析如下: 同样代码表现的不同行为:   创建基类(Super)和派生类(Sub)每个类有一个字段field和一个公共方法getField,并且使用内联的方式初始化为1,方法getField返回字段field.C#和Java代码及运行结果如下 复制代码 代码如下: class Super {         public int field = 0;           public int getField()         {

  • c#通过进程调用cmd判断登录用户权限代码分享

    复制代码 代码如下: /// <summary>/// 应用程序的主入口点./// </summary>[STAThread]static void Main(){ if (RunCmd("net localgroup administrators").IndexOf(System.Environment.UserName) >= 0)    { //顺利执行.    }    else    {        //报错提示系统不是管理员用户登录,容易导致

  • C#判断程序是否是管理员权限运行的方法代码示例

    public bool IsAdministrator() { WindowsIdentity current = WindowsIdentity.GetCurrent(); WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current); return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator); }

  • C#权限管理和设计浅谈

    此文主要想和大家分享的是这段时间,对权限管理和设计的断断续续的思考学习,和个人的一些软件开发等方面的看法. 提到'权限管理和设计',大家可能会第一时间想到这园子里的 吉日嘎拉,在这方面他可以算是'大牛'或专家 --他的'通用权限管理系统',究竟做的怎样,看看他的博客就差不多可以知道了(貌似我在给他做推广,呵呵...,but in fact,is not),别的暂且不敢说,最起码可以看出他研究的比较深入和狂热,其系统也具有一定的'成熟度',用他的话来说--就是在努力做到他的极致.他做的是通用权限管

  • 采用C#代码动态设置文件权限

    在开发中,我们经常会使用IO操作,例如创建,删除文件等操作.在项目中这样的需求也较多,我们也会经常对这些操作进行编码,但是对文件的权限进行设置,这样的操作可能会手动操作,现在介绍一种采用代码动态对文件设置权限的操作. 在对文件进行权限设置在DOtNet中,会采用FileSystemAccessRule类进行文件的权限操作. 1.现在看一下FileSystemAccessRule的实现代码: public FileSystemAccessRule( IdentityReference identi

  • C#枚举中的位运算权限分配浅谈

    常用的位运算主要有与(&), 或(|)和非(~), 比如: 1 & 0 = 0, 1 | 0 = 1, ~1 = 0 在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理. 第一步, 先建立一个枚举表示所有的权限管理操作: 复制代码 代码如下: [Flags] public enum Permissions { Insert = 1, Delete = 2, Update = 4, Query = 8 } [Flags]表示该枚举可以支持C#位运算, 而枚举的每一项值, 我们用2的

  • c# 解决IIS写Excel的权限问题

    具体配置方法如下: 1:在服务器上安装office的Excel软件. 2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务" 3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置" 4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击

  • 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

  • FreeBSD6.1Release下利用BIND架设DNS服务器的方法

    通过此服务器,使内网用户能正常访问INTERNET,这里我们使用FreeBSD自带的BIND来实现DNS的解析,事实上INTERNET上很多DNS都使用了这个软件.基本的操作步骤如下: ◇ DNS父域(edu.cn)给我的信息如下:域 -> wxicab.edu.cnDNS主服务器 -> 58.193.128.55 [dns1.wxicab.edu.cn]DNS辅服务器 -> 58.193.128.56 [dns2.wxicab.edu.cn](本笔记中只架设主服务器的配置过程) ◇ 网

  • 在Windows 7 上安装DNS服务器bind9方法详解

    本文主要介绍在WIN7上利用ntbind部署DNS服务器的方法.ntbind是Bind的Windows版本, 1.下载BIND9.11 下载地址:http://ftp.isc.org/isc/bind9/9.11.0rc3/. 我的系统是window 7 64位需要下载BIND9.11.0rc3.x64.zip,建议下载9.11以上的版本,老版本可能不支持Win7,下载时注意区分操作系统的位数. 2.安装BIND9.11 下载完成后,解压文件,点击BINDInstall.exe直接傻瓜式的安装

  • 图文详解添加DNS服务器的操作步骤

    用于安装DNS服务器的计算机必须使用静态IP地址,如172.16.16.99.系统下载安装完DNS服务器组件后,单击"开始"-管理工具"-"DNS"命令,就能打开"dnsmgmt"控制台,如图1所示.在该控制台中,可以完成DNS服务器的设置工作.在WindowsServer2003系统中默认的是将本地计算机作为DNS服务器的硬件设备,即将本地计算机的IP地址或名称指定给DNS服务器,图2是将YL服务器指定给[)NS服务器. "

  • PyCharm 2021.2 (Professional)调试远程服务器程序的操作技巧

    目录 一.PyCharm 2021.2 (Professional) 的安装与激活 二.PyCharm 2021.2 (Professional) 调试远程服务器程序 1.在 PyCharm 中导入项目或者选择新建项目 2.在服务器端与该项目对应的目录下面创建同名文件夹 LSTMTrain 3.与服务器建立连接 4.在本地连上服务器端的Python运行环境 5.测试 目前在网上搜到的利用 PyCharm 调试远程服务器程序的教程大多都是针对 PyCharm 2020.2019,甚至更早版本,Py

  • 利用Intellij Idea连接远程服务器实现远程上传部署功能

    如果我们在Intellij Idea中开发好程序,需要部署到远程SSH服务器运行,我们可以使用某些SSH软件的rz功能,也可以使用专用的FTP.SFTP上传工具.其实我们可以直接在Idea软件内来配置部署,不但不用切换软件,也不用翻找本地打包的位置,随时i修改,随时更新. 一.Tools->Deployment->Configuration 二.点击左上角"+"号,新建一个SFTP,输入一个名称,比如"StormServer" 三.填写远程SSH服务器信

  • golang DNS服务器的简单实现操作

    简单的DNS服务器 提供一个简单的可以查询域名和反向查询的DNS服务器. dig命令主要用来从 DNS 域名服务器查询主机地址信息. 查找www.baidu.com的ip (A记录): 命令:dig @127.0.0.1 www.baidu.com 根据ip查找对应域名 (PTR记录): 命令:dig @127.0.0.1 -x 220.181.38.150 源码 : package mainimport ( "fmt" "net" "golang.org

  • Windows DNS服务器曝"蠕虫级"漏洞,已存在长达17年

    漏洞介绍 SigRed漏洞的高危害性在于其是可蠕虫的,也就是可以自传播的,无需用户交互就能传播到易受攻击的设备上,允许未经身份验证的远程攻击者获得针对目标服务器的域管理员特权,并完全控制组织的IT基础架构. 漏洞运行机制 攻击者可以通过将恶意DNS查询发送到Windows DNS服务器并实现任意代码执行来利用SigRed漏洞,从而使黑客能够拦截和操纵用户的电子邮件和网络流量,使服务不可用,收获用户的电子邮件. 当DNS服务器无法解析给定域名(例如www.google.com)的IP地址时,查询会

  • 利用SMB共享来绕过php远程文件包含的限制

    利用SMB共享来绕过php远程文件包含的限制 在这篇博文中,我将为大家演示如何利用PHP应用中的远程文件包含漏洞的技术.我们将绕过php远程文件包含的限制,并执行RFI的利用,即使PHP环境被配置为不包含来自远程HTTP/FTP URL的文件. PHP 和 SMB 共享文件访问 在PHP配置文件中,"allow_url_include"wrapper默认设置为"Off",指示PHP不加载远程HTTP或FTP URL,从而防止远程文件包含攻击.但是,即使"a

  • 使用python远程操作linux过程解析

    这篇文章主要介绍了使用python远程操作linux过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在云服务测试中,往往需要我们进入云服务内容进行相关内容的测试.这测试可以使用平台自身的noVNC.外部辅助xshell等工具连接到云服务内部进行测试. 但是在如此反复的测试操作中,就需要用到自动化测试方法去解决这方面的需求. 在python中我们可以通过第三方库paramiko,对linux的云服务器进行操作. 如下命令先行安装 pip

随机推荐