摘要
想必大家对小榕时光等扫描器都非常熟悉了,有没有自己写一个的冲动。最近微软推实施了.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>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
IPHostEntrymyHost=newIPHostEntry();
try
{
this.richTextBox1.Text="";
//Dns.GetHostName()获取本地计算机的主机名
//Dns.GetHostByName()获取指定DNS主机名的DNS信息
//得到本地主机的DNS信息
myHost=Dns.GetHostByName(Dns.GetHostName());
//显示本地主机名
textBox1.Text=myHost.HostName.ToString();
//显示本地主机的IP地址表
for(inti=0;i<myHost.AddressList.Length;i++)
{
richTextBox1.AppendText("本地主机IP地址->"+myHost.AddressList[i].ToString()+"r");
}
}
catch(Exceptionerror)
{
MessageBox.Show(error.Message);
}
}
3.远程查询
privatevoidbutton2_Click(objectsender,System.EventArgse)
{
this.richTextBox1.Text="";
IPHostEntrymyDnsToIP=newIPHostEntry();
//Dns.Resolve方法:将DNS主机名或以点分隔的四部分表示法格式的
//IP地址解析为IPHostEntry实例
myDnsToIP=Dns.Resolve(textBox2.Text.ToString());
//显示此域名的IP地址的列表
for(inti=0;i<myDnsToIP.AddressList.Length;i++)
{
richTextBox1.AppendText(textBox2.Text+"的IP地址是"+myDnsToIP.AddressList[i].ToString()+"r");
}
}
4.实现网段的扫描
实现网段的扫描,确定网络中正在使用的主机数目。这里使用了多线程技术,增加了一个线程,为了防止程序扫描的时间过长,影响程序的响应。不过在.net中由于使用了垃圾收集技术所以对线程的控制也不是很复杂的。
privatevoidbutton3_Click(objectsender,System.EventArgse)
{
this.richTextBox1.Text="";
//Thread类:创建并控制线程
//ThreadthScan=newThread(newThreadStart(ScanTarget));
ThreadthScan=newThread(newThreadStart(ScanTarget));
//Thread.Start方法:启动线程
thScan.Start();
}
privatevoidScanTarget()
{
//构造IP地址的31-8BIT位,也就是固定的IP地址的前段
//numericUpDown1是定义的System.Windows.Forms.NumericUpDown控件
stringstrIPAddress=numericUpDown1.Text+"."+numericUpDown2.Text+"."+numericUpDown3.Text+".";
//开始扫描地址
intnStrat=Int32.Parse(numericUpDown4.Text);
//终止扫描地址
intnEnd=Int32.Parse(numericUpDown5.Text);
//扫描的操作
for(inti=nStrat;i<=nEnd;i++)
{
stringstrScanIPAdd=strIPAddress+i.ToString();
//转换成IP地址
IPAddressmyScanIP=IPAddress.Parse(strScanIPAdd);
try
{
//你可以加入自已的,增强功能
//Dns.GetHostByAddress方法:根据IP地
//址获取DNS主机信息。
IPHostEntrymyScanHost=Dns.GetHostByAddress(myScanIP);
//获取主机的名
stringstrHostName=myScanHost.HostName.ToString();
richTextBox1.AppendText(strScanIPAdd+"->"+strHostName+"r");
}
catch(Exceptionerror)
{
MessageBox.Show(error.Message);
}
}
}
到此为止一个简单用C#实现扫描器的主要功能就完成了,试一下你可以看到你的网络上的主机,有没有成就感了:)