首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>asp.net>资讯:.NET的实现对DNS服务器的管理

.NET的实现对DNS服务器的管理

www.jz123.cn  2011-11-14   来源:   站长家园    责任编辑(袁袁)    我要投递新闻

 最近在做一个虚拟机的web管理系统,中间遇到一个问题,就是新建的虚拟机不能通过主机名访问,原因是DNS出了问题,没有对应的主机名和IP地址的记录,网络这边暂时又解决不了,只能把这个问题交给我们,让我们通过程序来实现记录的添加与删除了。
  解决方案:
  1)通过powershell编程来实现。
  2)用.net编程来实现。
  我找了下.net关于DNS的类库,但没有相应的方法,只能通过WMI编程来间接实现了。
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Management;
  using System.Data;
  namespace TestDNS
  {
  public  class DNSManage
  {
  #region filed
  private string sServerPath;
  private string username = null;
  private string password = null;
  private string DNSName = null;
  private ManagementScope DNS;
  private System.Management.ManagementObjectCollection Q;
  private ManagementClass DnsClass;
  private ManagementBaseObject MI;
  private string errMessage = null;
  #endregion
  #region property
  public string ErrMessage
  {
  get
  {
  return errMessage;
  }
  }
  public string ServerName
  {
  set
  {
  this.sServerPath = string.Format(@"\{0} ootMicrosoftDNS", value);
  this.DNSName = value;
  }
  }
  public string userName
  {
  set
  {
  this.username = value;
  }
  }
  public string passWord
  {
  set
  {
  this.password = value;
  }
  }
  #endregion
  public DNSManage()
  {
  sServerPath = @"\localhost ootMicrosoftDNS";
  DNSName = "localhost";
  }
  public ManagementObjectCollection QueryDNS(string query)
  {
  if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
  {
  System.Management.ConnectionOptions Conn = new ConnectionOptions();
  Conn.Username = username;
  Conn.Password = password;
  DNS = new ManagementScope(sServerPath, Conn);
  }
  else
  {
  DNS = new ManagementScope(sServerPath);
  }
  if (!DNS.IsConnected)
  {
  DNS.Connect();
  }
  System.Management.ManagementObjectSearcher QS = new ManagementObjectSearcher(DNS, new ObjectQuery(query));
  QS.Scope = DNS;
  return QS.Get();
  }
  public ManagementObjectCollection QueryDNS(string query, string DnsType)
  {
  this.Create(DnsType);
  System.Management.ManagementObjectSearcher QS = new ManagementObjectSearcher(DNS, new ObjectQuery(query));
  QS.Scope = DNS;
  return QS.Get();
  }
  private void Create(string DnsType)
  {
  if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
  {
  System.Management.ConnectionOptions Conn = new ConnectionOptions();
  Conn.Username = username;
  Conn.Password = password;
  DNS = new ManagementSc

  ope(sServerPath, Conn);
  }
  else
  {
  DNS = new ManagementScope(sServerPath);
  }
  if (!DNS.IsConnected)
  {
  DNS.Connect();
  }
  ManagementPath Path = new ManagementPath(DnsType);
  this.DnsClass = new ManagementClass(DNS, Path, null);
  }
  public bool IsExistsZone(string domain)
  {
  try
  {
  Q = QueryDNS("Select * From MicrosoftDNS_ZONE where ContainerName='" + domain + "'");
  foreach (ManagementObject oManObject in Q)
  {
  //Console.WriteLine(oManObject["ContainerName"].ToString());
  return true;
  }
  return false;
  }
  catch (Exception e)
  {
  errMessage = e.Message;
  Console.WriteLine(e.ToString());
  return false;
  }
  }
  
   public bool IsExistsAType(string domain, string OwnerName)
  {
  try
  {
  Q = QueryDNS("Select * From MicrosoftDNS_AType where OwnerName='" + OwnerName + "' and ContainerName='" + domain + "'");
  foreach (ManagementObject oManObject in Q)
  {
  return true;
  }
  return false;
  }
  catch (Exception e)
  {
  errMessage = e.Message;
  Console.WriteLine(e.ToString());
  return false;
  }
  }
  public bool CreateAType(string ContainerName, string HostName, string IPAddress, string TTL)
  {
  try
  {
  string OwnerName = null;
  if (string.IsNullOrEmpty(HostName))
  {
  OwnerName = ContainerName;
  }
  else
  {
  OwnerName = HostName + "." + ContainerName;
  }
  this.Create("MicrosoftDNS_AType");
  if (!IsExistsZone(ContainerName))
  {
  errMessage = string.Format("domain:{0} is not exist", ContainerName);
  return false;
  }
  if (IsExistsAType(ContainerName, OwnerName))
  {
  errMessage = string.Format("{0} exist in {1}", OwnerName, ContainerName);
  return false;
  }
  MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
  MI["DnsServerName"] = DNSName;
  MI["ContainerName"] = ContainerName;
  MI["OwnerName"] = OwnerName;
  MI["IPAddress"] = IPAddress;
  if (string.IsNullOrEmpty(TTL))
  {
  TTL = "3600";
  }
  MI["TTL"] = TTL;
  DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
  errMessage = "add " + OwnerName + " success.";
  return true;
  }
  catch (Exception e)
  {
  errMessage = e.Message;
  Console.WriteLine(e.ToString());
  return false;
  }
  }
  public bool CreateAType(string DnsServerName, string ContainerName, string HostName, uint RecordClass, uint TTL, string IPAddress)
  {
  try
  {
  string OwnerName = null;
  if (string.IsNullOrEmpty(HostName))
  {
  OwnerName = ContainerName;
  }
  else
  {
  OwnerName = HostName + "." + Co

  ntainerName;
  }
  this.Create("MicrosoftDNS_AType");
  if (!IsExistsZone(ContainerName))
  {
  errMessage = string.Format("domain:{0} is not exist", ContainerName);
  return false;
  }
  if (IsExistsAType(ContainerName, OwnerName))
  {
  errMessage = string.Format("{0} exist in {1}", OwnerName, ContainerName);
  return false;
  }
  MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
  MI["DnsServerName"] = DnsServerName;
  MI["ContainerName"] = ContainerName;
  MI["OwnerName"] = OwnerName;
  MI["RecordClass"] = RecordClass;
  MI["TTL"] = TTL;
  MI["IPAddress"] = IPAddress;
  DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
  errMessage = "add " + OwnerName + " success.";
  return true;
  }
  catch (Exception e)
  {
  errMessage = e.Message;
  Console.WriteLine(e.ToString());
  return false;
  }
  }
  public bool ModifyAType(string ContainerName, string HostName, string IPAddress, string TTL)
  {
  try
  {
  string OwnerName = null;
  if (string.IsNullOrEmpty(HostName))
  {
  OwnerName = ContainerName;
  }
  else
  {
  OwnerName = HostName + "." + ContainerName;
  }
  if (!IsExistsZone(ContainerName))
  {
  errMessage = string.Format("domain:{0} is not exist", ContainerName);
  return false;
  }
  if (!IsExistsAType(ContainerName, OwnerName))
  {
  errMessage = string.Format("{0} not exist in {1}", OwnerName, ContainerName);
  return false;
  }
  Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");
  foreach (ManagementObject oManObject in Q)
  {
  if (oManObject["IPAddress"].ToString() == IPAddress)
  {
  errMessage =  OwnerName + " ipaddress is same.";
  return false;
  }
  MI = oManObject.GetMethodParameters("Modify");
  MI["IPAddress"] = IPAddress;
  MI["TTL"] = TTL;
  oManObject.InvokeMethod("Modify", MI, null);
  errMessage = "modify " + OwnerName + " success.";
  return true;
  }
  errMessage = string.Format("{0} failed", OwnerName);
  return false;
  }
  catch (Exception e)
  {
  errMessage = e.Message;
  Console.WriteLine(e.ToString());
  return false;
  }
  }
  public bool DelAType(string ContainerName, string HostName)
  {
  try
  {
  string OwnerName = null;
  if (string.IsNullOrEmpty(HostName))
  {
  OwnerName = ContainerName;
  }
  else
  {
  OwnerName = HostName + "." + ContainerName;
  }
  if (!IsExistsZone(ContainerName))
  {
  errMessage = string.Format("domain:{0} is not exist", ContainerName);
  return false;
  }
  if (!IsExistsAType(ContainerName, OwnerName))
  {
  errMessage = string.Format("{0} not exist in {1}", OwnerName, ContainerName);
  return false;
  }
  Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");
  foreach (ManagementObject oManObject in Q)
  {
  oManObject.Delete();
  return true;
  }
  errMessage = string.Format("{0}:{1},error", ContainerName, OwnerName);
  return false;
  }
  catch (Exception e)
  {
  errMessage = e.Message;
  Console.WriteLine(e.ToString());
  return false;
  }
  }
  public DataTable ListExistsAType(string ContainerName)
  {
  DataTable table = new DataTable("MicrosoftDNS_AType" + ContainerName);
  table.Columns.Add("OwnerName");
  table.Columns.Add("IPAddress");
  table.Columns.Add("TTL");
  try
  {
  Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "'");
  foreach (ManagementObject oManObject in Q)
  {
  try
  {
  DataRow row = table.NewRow();
  row["OwnerName"] = oManObject["OwnerName"];
  row["IPAddress"] = oManObject["IPAddress"];
  row["TTL"] = oManObject["TTL"];
  table.Rows.Add(row);
  }
  catch (Exception e)
  {
  Console.WriteLine(e.ToString());
  }
  }
  }
  catch (Exception e)
  {
  errMessage = e.Message;
  Console.WriteLine(e.ToString());
  }
  return table;
  }
  public bool Test(string ContainerName, string HostName, string IPAddress)
  {
  string TTL = "3600";
  try
  {
  string OwnerName = null;
  if (string.IsNullOrEmpty(HostName))
  {
  OwnerName = ContainerName;
  }
  else
  {
  OwnerName = HostName + "." + ContainerName;
  }
  if (!IsExistsZone(ContainerName))
  {
  errMessage = string.Format("domain:{0} is not exist", ContainerName);
  return false;
  }
  if (!IsExistsAType(ContainerName, OwnerName))
  {
  this.CreateAType(ContainerName, HostName, IPAddress, TTL);
  return true;
  }
  Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");
  foreach (ManagementObject oManObject in Q)
  {
  if (oManObject["IPAddress"].ToString() == IPAddress)
  {
  errMessage = OwnerName + " ipaddress is not be modifid.";
  return false;
  }
  MI = oManObject.GetMethodParameters("Modify");
  MI["IPAddress"] = IPAddress;
  MI["TTL"] = TTL;
  oManObject.InvokeMethod("Modify", MI, null);
  errMessage = "modify " + OwnerName + " success.";
  return true;
  }
  errMessage = string.Format("{0} failed", OwnerName);
  return false;
  }
  catch (Exception e)
  {
  errMessage = e.Message;
  Console.WriteLine(e.ToString());
  return false;
  }
  return false;
  }
  }
  }


上一篇:.net2008实例 编写文字加解密程序 下一篇:.NET Forms权限验证

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图