C#中实现网段扫描的代码

 更新时间:2007年04月16日 00:00:00   作者:  
摘要 
想必大家对小榕时光等扫描器都非常熟悉了,有没有自己写一个的冲动。最近微软推实施了.NET战略方案,C#是主推语言,你们是否有兴趣用C#来实现对局域网IP地址的扫描,尝试一下自己写的快乐,那么请跟我来。 
正文 
1.先介绍一下使用的类: 
DNS类:在.net中的System.net命名空间下,主要的功能是从 Internet 域名系统 (DNS) 检索关于特定主机的信息。 
IPHostEntry类:将一个域名系统 (DNS) 主机与一组别名和一组匹配的 IP 地址关联,和DNS类一起使用。 
IPAddress 类:IP 网络上的地址。 
使用的命名空间有: 
System.Net 命名空间为当前网络上使用的多种协议提供了简单的编程接口. 
System.IO命名空间包含允许在数据流和文件上进行同步和异步读取及写入的类型。 
System.Thread 命名空间主要是用来多线程序编程。 
程序实现以下几个功能: 
2.获取本地主机IP地址 
/// <summary> 
/// 按扭查询本机ip 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
private void button1_Click(object sender, System.EventArgs e) 

IPHostEntry myHost = new IPHostEntry(); 
try 

this.richTextBox1.Text = ""; 
// 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); 


3.远程查询 
private void button2_Click(object sender, System.EventArgs e) 

this.richTextBox1.Text = ""; 
IPHostEntry myDnsToIP = new IPHostEntry(); 
//Dns.Resolve 方法: 将 DNS 主机名或以点分隔的四部分表示法格式的 
// IP 地址解析为 IPHostEntry实例 
myDnsToIP =Dns.Resolve(textBox2.Text.ToString()); 
//显示此域名的IP地址的列表 
for(int i=0;i<myDnsToIP.AddressList.Length;i++) 

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


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

this.richTextBox1.Text = ""; 
//Thread 类: 创建并控制线程 
//Thread thScan = new Thread(new ThreadStart(ScanTarget)); 
Thread thScan = new Thread(new ThreadStart(ScanTarget)); 
//Thread.Start 方法:启动线程 
thScan.Start(); 

private void ScanTarget() 

//构造IP地址的31-8BIT 位,也就是固定的IP地址的前段 
// numericUpDown1是定义的System.Windows.Forms.NumericUpDown控件 
string strIPAddress = numericUpDown1.Text + "." + numericUpDown2.Text + "." + numericUpDown3.Text + "."; 
//开始扫描地址 
int nStrat = Int32.Parse(numericUpDown4.Text); 
//终止扫描地址 
int nEnd =Int32.Parse(numericUpDown5.Text); 
//扫描的操作 
for(int i = nStrat; i <= nEnd; i++) 

string strScanIPAdd = strIPAddress +i.ToString(); 
//转换成IP地址 
IPAddress myScanIP = IPAddress.Parse(strScanIPAdd); 
try 

//你可以加入自已的,增强功能 
// Dns.GetHostByAddress 方法: 根据 IP 地 
//址获取 DNS 主机信息。 
IPHostEntry myScanHost = Dns.GetHostByAddress(myScanIP); 
//获取主机的名 
string strHostName =myScanHost.HostName.ToString(); 
richTextBox1.AppendText(strScanIPAdd + "->" + strHostName + "\r"); 

catch(Exception error) 

MessageBox.Show(error.Message); 



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

相关文章

  • C#操作Excel的多种方式小结

    C#操作Excel的多种方式小结

    在项目开发过程和办公过程中,经常要遇到对Excel进行创建,读写等操作,本文为大家整理了一些C#操作Excel的方法,感兴趣的小伙伴可以了解一下
    2024-11-11
  • C#基础知识 全面解析可空类型

    C#基础知识 全面解析可空类型

    C# 2.0 中还引入了可空类型,可空类型也是值类型,只是可空类型是包括null的值类型的,下面就介绍下C#2.0中对可空类型的支持具体有哪些内容
    2012-11-11
  • C#异步调用的好处和方法分享

    C#异步调用的好处和方法分享

    我们要明确,为什么要进行异步回调?众所周知,普通方法运行,是单线程的,如果中途有大型操作(如:读取大文件,大批量操作数据库,网络传输等),都会导致方法阻塞,表现在界面上就是,程序卡或者死掉,界面元素不动了,不响应了
    2012-04-04
  • C#如何实现图片查看器

    C#如何实现图片查看器

    这篇文章主要为大家详细介绍了C#如何实现图片查看器的相关方法,C#实现一个像Windows自带的图片查看器的功能,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • C#编程实现对象与JSON串互相转换实例分析

    C#编程实现对象与JSON串互相转换实例分析

    这篇文章主要介绍了C#编程实现对象与JSON串互相转换的方法,结合实例分析了在DoNet2.0与Donet3.5环境下实现对象与JSON转换的相关技巧,需要的朋友可以参考下
    2015-11-11
  • C#使用struct类型作为泛型Dictionary<TKey,TValue>的键

    C#使用struct类型作为泛型Dictionary<TKey,TValue>的键

    这篇文章介绍了C#使用struct类型作为泛型Dictionary<TKey,TValue>键值的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • C#使用StreamWriter写入文件的方法

    C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 详解C#如何实现窗体换肤

    详解C#如何实现窗体换肤

    这篇文章主要为大家详细介绍了如何利用C#实现窗体换肤,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • C#使用SendMessage实现进程间通信的方法

    C#使用SendMessage实现进程间通信的方法

    这篇文章主要介绍了C#使用SendMessage实现进程间通信的方法,涉及C#中SendMessage方法的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • C#算法之关于大牛生小牛的问题

    C#算法之关于大牛生小牛的问题

    这篇文章主要介绍了C#算法之关于大牛生小牛的问题,是C#非常典型的算法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01

最新评论