DNS类<=>IP地址的提取与查询

using System.Net; //命名空间为当前网络上使用的多种协议提供了简单的编程接口.
using System.IO;  //命名空间包含允许在数据流和文件上进行同步和异步读取及写入的类型。
using  System.Threading; //命名空间主要是用来多线程序编程。

 // DNS类:在.net中的System.net命名空间下,主要的功能是从 Internet 域名系统 (DNS) 检索关于特定主机的信息。
 // IPHostEntry类:将一个域名系统 (DNS) 主机与一组别名和一组匹配的 IP 地址关联,和DNS类一起使用。
 // IPAddress 类:IP 网络上的地址。

主要功能点:

 /// <summary>
  /// 获取本地主机IP地址
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnLocalIp_Click(object sender, System.EventArgs e)
  {
   IPHostEntry  myHost=new IPHostEntry();
   try
   {
    // Dns.GetHostName();   获取本地计算机的主机名
    // Dns.GetHostByName(); 获取指定DNS主机名的DNS信息
    //得到本地主机的DNS信息
    myHost=Dns.GetHostByName(Dns.GetHostName());
    //显示本地主机名
    textBox1.Text=myHost.HostName.ToString();
    //显示本地主机的IP地址列表
    for(int i=0;i<myHost.AddressList.Length;i++)
    {
     this.richTextBox1.AppendText("本地主机IP地址->"+myHost.AddressList[i].ToString()+"\r");

    }
   }
   catch(Exception err)
   {
    MessageBox.Show(err.Message);
   }
  
  }

  /// <summary>
  /// 远程查询
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnRemote_Click(object sender, System.EventArgs e)
  {
   
   try
   {
    IPHostEntry myDnsToIp=new IPHostEntry();
    // Dns.Resolve 方法: 将 DNS 主机名(以点分隔的四部分表示法格式的)或 IP 地址解析为 IPHostEntry实例
    myDnsToIp=Dns.Resolve(textBox2.Text.ToString());
    for(int i=0;i<myDnsToIp.AddressList.Length;i++)
    {
     this.richTextBox1.AppendText(textBox2.Text+"的 IP地址是 :"+myDnsToIp.AddressList[i].ToString()+"\r");
    }
   }
   catch(Exception err)
   {
    MessageBox.Show(err.Message,"远程查询");
   }
  }

  /// <summary>
  /// 实现网段的扫描,确定网络中正在使用的主机数目。这里使用了多线程技术,
  /// 增加了一个线程,为了防止程序扫描的时间过长,影响程序的响应。
  /// 不过在.net中由于使用了垃圾收集技术所以对线程的控制也不是很复杂的。
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnScan_Click(object sender, System.EventArgs e)
  {
   //Thread 类:创建并控制线程
   Thread  thScan=new Thread(new ThreadStart(ScanTarget));
   //Thread.Start()方法 启动线程
   thScan.Start();

  }
  private void  ScanTarget()
  {
  // this.btnScan.Enabled = false;

   //构造IP地址的31-8bit位,也就是固定的IP地址的前段
   //numericUpdown1是定义的System.Windows.Forms.numericUpDown控件
   string strIPAddress=numericUpDown1.Value+"."+numericUpDown2.Value+"."+numericUpDown3.Value;
   // MessageBox.Show(strIPAddress);
   //开始扫描地址
   int nStart=Int32.Parse(numericUpDown4.Value.ToString());
   //终止扫描地址
   int nEnd=Int32.Parse(this.numericUpDown5.Value.ToString());
   //扫描的操作
   for(int i=nStart;i<=nEnd;i++)
   {
    string strScanIPAdd=strIPAddress+"."+i.ToString();
    //转换成IP地址  将 IP 地址字符串转换为 IPAddress 实例。
    IPAddress myScanIP=IPAddress.Parse(strScanIPAdd);
    try
    {
     //你可以加入自己的,增强功能
     //Dns.GetHostByAddress方法 根据IP地址获取Dns主机信息
     IPHostEntry  myScanHost=Dns.GetHostByAddress(myScanIP);
     //获取主机名
     string strHostName=myScanHost.HostName.ToString();
     this.richTextBox1.AppendText(strScanIPAdd+"->"+strHostName+"\r");

    }
    catch(Exception err)
    {
     MessageBox.Show(err.Message,"网段扫描");
    }
   }
   //this.btnScan.Enabled=true;
   
  }
}
}

原文地址:https://www.cnblogs.com/flashicp/p/691335.html