C#实现网段扫描


摘要

 

想必大家对小榕时光等扫描器都非常熟悉了,有没有自己写一个的冲动。最近微软推实施了.NET战略方案,C#是主推语言,你们是否有兴趣用C#来实现对局域网IP地址的扫描,尝试一下自己写的快乐,那么请跟我来。

 

 

--------------------------------------------------------------------------------

 

目录

 

1.使用的类

 

2.获取本地主机IP地址

 

3.远程查询

 

4.实现网段的扫描

 

 

--------------------------------------------------------------------------------

 

正文

 

1.先介绍一下使用的类:

 

DNS类:在.net中的System.net命名空间下,主要的功能是从 Internet 域名系统 (DNS) 检索关于特定主机的信息。

 

IPHostEntry类:将一个域名系统 (DNS) 主机与一组别名和一组匹配的 IP 地址关联,和DNS类一起使用。

 

IPAddress 类:IP 网络上的地址。

 

使用的命名空间有:

 

System.Net 命名空间为当前网络上使用的多种协议提供了简单的编程接口.

 

System.IO命名空间包含允许在数据流和文件上进行同步和异步读取及写入的类型。

 

System.Thread 命名空间主要是用来多线程序编程。

 

程序实现以下几个功能:

 

2.获取本地主机IP地址

 

//对Button控件的事件的响应

private void buttion1_click(objectsender,System.Event.Args 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++)

{

  richTextBox1.AppendText(“本地主机IP地址->”+myHost.AddressList[i].ToString()+”\r”);

}

                catch(Exception error)

                            {

                                   MessageBox.Show(error.Message);

                }

}//private

 

3.远程查询

 

 private void buttion2_click(object Sender,System.EventArgs e)

{

 

  IPHostEntry myDnsToIP = new IPHostEntry();

 //Dns.Resolve 方法: 将 DNS 主机名或以点分隔的四部分表示法格式的 //  IP 地址解析为 IPHostEntry实例

myDnsToIP=Dns.Resolve(textBox2.Text.ToString());

//显示此域名的IP地址的列表

for(int i=0;i<myDnsToIPAddressList.Length;i++)

{

      rich.TextBox1.AppendText(textBox2.Text+”的IP地址是”+myDnsToIP.AddressList[i].ToString()+”\r”);

}

}

 

4.实现网段的扫描

 

实现网段的扫描,确定网络中正在使用的主机数目。这里使用了多线程技术,增加了一个线程,为了防止程序扫描的时间过长,影响程序的响应。不过在.net中由于使用了垃圾收集技术所以对线程的控制也不是很复杂的。

 

private void button3_click(object sender,System.EventArgs e)

{

       //Thread类: 创建并控制线程

       ThreadthScan = new thread(new ThreadStrart(ScanTarget));

       //Thread.Start方法:启动线程

       thScan.Strart();

  }

       privatevoid ScanTarget()

       {

              //构造IP地址的31-8BIT 位,也就是固定的IP地址的前段

              //numericUpDown1是定义的System.Windows.Forms.NumericUpDown控件

       stringstrIPAddress=numericUpDown1.Text+”.”+numericUpDown2.Text+”.”+numericUpDown3.Text+”.”;

     //开始扫描地址

     int nStrat = Int32.Parse(numericUpDown4.Text);

              //终止扫描地址

     int nEnd =Int32.Parse(numericUpDown5.Text);

              //扫描的操作

              for(inti=nStrat;i<=nEnd;i++)

              {

                     stringstrScanIPAdd = strIPAddress +i.ToString();

                     //转换成IP地址

                     IPAddressmyScanIP = IPAddress.Parse(strScanIPAdd);

                     try

                     {

                            //你可以加入自已的,增强功能

       //Dns.GetHostByAddress 方法: 根据 IP 地

//址获取 DNS 主机信息。

IPHostEntry myScanHost =

Dns.GetHostByAddress(myScanIP);

//获取主机的名

string strHostName=myScanHost.HostName.ToString();

richTextBox1.AppendText(strScanIPAdd+”->”+strHostName+”\r”);

                     }

                     catch(Exceptionerror)

                     {

                            MessageBox.Show(error.Message);

                     }

              }//for     

 }//private

 

到此为止一个简单用C#实现扫描器的主要功能就完成了,试一下你可以看到你的网络上的主机,有没有成就感了:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值