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

2016-02-19 11:04 45 1 收藏

下面,图老师小编带您去了解一下C#中实现网段扫描的代码,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - 编程语言 】

摘要 
想必大家对小榕时光等扫描器都非常熟悉了,有没有自己写一个的冲动。最近微软推实施了.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; imyHost.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;imyDnsToIP.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#实现扫描器的主要功能就完成了,试一下你可以看到你的网络上的主机,有没有成就感了:)  

来源:http://www.tulaoshi.com/n/20160219/1596470.html

延伸阅读
在.Net 中 DataGrid 虽然有排序的功能,但并不支持双向的排序。用到了,看了些相关的帖子,自己尝试了一种方法,竟然也行得通,主要是用DataGrid.Attributes 存了一个参数,同时在onSortCommand中修改了DataGridColumn的SortExpression. 代码如下: private void BindData(){ DataTable dt = .......; if(dt != null) { DataVi...
Java 5之后提供优秀的并发库util.concurrent,.Net中缺乏类似的功能。由于硬件体系发生了变化,多核时代来临,.NET中缺乏并发类库显然不合时宜。缓解这一矛盾的其中一个办法就是在往 C# 中移植java的 util.concurrent 。 java中的util.concurrent包中提供了一个类LockSupport,util.concurrent包很多关键实现需要调用LockSupport。...
在.NET框架下的C#语言,和其他.NET语言一样提供了很多强大的特性和机制.其中一些是全新的,而有些则是从以前的语言和平台上照搬过来的。然而,这种巧妙的结合产生了一些有趣的方法可以用来解决我们的问题。这篇文章将讲述如何利用这些奇妙的特性,用插件(plug-ins)机制建立可扩展的解决方案。后面也将提供一个简要的例子,你甚至可以用这个...
标签: Web开发
C#实现文件拖放并打开文件 需要知道的ListBox的两个事件:当您在控件的边界内拖动对象时,便会发生 DragEnter 事件;该事件用于确 定当前拖动的对象是不是您要放到控件上的对象。 在将一个或多个文件拖到控件上时,需要处理此事件。 这使 得在将对象拖到控件上方时,能够根据所拖动的对象显示相应的图标。 将拖动的对象释放到控件上时,...
using System;  using System.Data;  using System.Configuration;  using System.Collections;  using System.Web;  using System.Web.Security;  using System.Web.UI;  using System.Web.UI.WebControls;  using System.Web.UI.WebControls.W...

经验教程

25

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部