内部网络扫描程序

http://www.microsoft.com/china/community/program/originalarticles/TechDoc/Csharpnet.mspx

实现功能:
1 当前本机的连机状态.
2 计算机名称--->IP;   IP--->计算机名称
3 网段扫描
实现过程:
需要调用的引用:

using System;
using System.Runtime ;
using System.Runtime.InteropServices ;


namespace NetworkScan
{
/**//// <summary>
///
/// </summary>
public class InternetCS
{
  //Creating the extern function
  [DllImport("wininet.dll")]
  private extern static bool InternetGetConnectedState(int Description,int Reservedvalue);

  //Creating a function that uses the API function
  public static bool IsConnectedToInternet()
  {
   int Desc=0;
   return InternetGetConnectedState(Desc,0);
  }
}
}

这个引用实现过程是:监控当前本机的连网状态
为了实现时实监控,需要在主程序里面进行时实监控 ,主程序里面添加Timer控件,时间间隔是1000微秒


private void timer1_Tick(object sender, System.EventArgs e)
        {
            label11.Text=DateTime.Now.Hour.ToString()+":"+ DateTime.Now.Minute.ToString()+":"+DateTime.Now.Second.ToString();
            if (textBox3.Text!="")
            {
                button3.Enabled=false;
            }
            else
            {
                button3.Enabled=true;
            }
            bool b_IsConnection=InternetCS.IsConnectedToInternet();
            if (b_IsConnection)
            {
                //
                textBox3.BackColor=Color.Red;//联网状态
            }
            else
            {
                textBox3.BackColor=Color.Yellow;  //非联网状态
            }
        }
窗体Load事件里面,代码如下:


private void Form1_Load(object sender, System.EventArgs e)
        {
            timer1.Enabled=true;
            IPHostEntry myHost = new IPHostEntry();
            try
            {
                getlocalipaddress.Text="";
                //得到本地主机的DNS信息
                myHost = Dns.GetHostByName(Dns.GetHostName());
                //显示本地主机名
                getlocalname.Text = "你的计算机名称:"+myHost.HostName.ToString();
                //显示本地主机的IP地址表
                getlocalipaddress.Text="";
                for(int i=0; i<myHost.AddressList.Length;i++)
                {
                    getlocalipaddress.Text="本地主机IP地址->"+myHost.AddressList[i].ToString();
                    
                }
            }
            catch
            {
            }
            
            
        }
IP--->ComputerName


private void button2_Click(object sender, System.EventArgs e)
        {
            //IP--->Name
            label5.Text="";
            try
            {
                IPAddress test1 = IPAddress.Parse(textBox2.Text.Trim());
                IPHostEntry iphe = Dns.GetHostByAddress(test1);
                label5.Text=iphe.HostName;
            }
            catch
            {
                if (label5.Text.Trim()=="")
                {
                    label5.Text="没有找到对应的计算机名称";
                }
            }
        }

Name--->IP


    private void button1_Click_1(object sender, System.EventArgs e)
        {
            //name--->IP
            label1.Text="";
            try
            {
                
                IPHostEntry myDnsToIP = new IPHostEntry();
                //Dns.Resolve 方法: 将 DNS 主机名或以点分隔的四部分表示法格式的 //  IP 地址解析为 IPHostEntry实例
                myDnsToIP =Dns.Resolve(textBox1.Text.ToString());
                //显示此域名的IP地址的列表
                for(int i=0;i<myDnsToIP.AddressList.Length;i++)
                {
                    label1.Text+=myDnsToIP.AddressList[i].ToString();
                }
                
            }
            catch
            {
                if (label1.Text.Trim()=="")
                {
                    label1.Text="没有找到对应IP";
                }

            }
        }
网段扫描部分:


        private void button3_Click(object sender, System.EventArgs e)
        {
            
            int i_IpBegin=0;
            int i_IpEnd=0;
            try
            {
                i_IpBegin=int.Parse(textBox7.Text.Trim());
                i_IpEnd=int.Parse(textBox8.Text.Trim());
                if ((i_IpBegin<0)&&(i_IpEnd>255))
                {
                    MessageBox.Show("输出超出范围");
                    return;
                }
            }
            catch
            {
                MessageBox.Show("输入错误");
                return;
            }

            textBox4.Text="";
            //Thread 类: 创建并控制线程
            Thread thScan = new Thread(new ThreadStart(ScanTarget));
            //Thread.Start 方法:启动线程
            thScan.Start();
          
            
        }
        private void ScanTarget()
        {
            //构造IP地址的31-8BIT 位,也就是固定的IP地址的前段
            // numericUpDown1是定义的System.Windows.Forms.NumericUpDown控件
            int i_IpBegin=int.Parse(textBox7.Text.Trim());
            int i_IpEnd=int.Parse(textBox8.Text.Trim());
            string strIPAddress=textBox5.Text;
            //扫描的操作
            for(int i=i_IpBegin;i<=i_IpEnd;i++)
            {
                string strScanIPAdd = strIPAddress +i.ToString();
                //转换成IP地址
                IPAddress myScanIP = IPAddress.Parse(strScanIPAdd);
                textBox3.Text=i.ToString();
                try
                {        
                    //Dns.GetHostByAddress 方法: 根据 IP 地
                    //址获取 DNS 主机信息。
                    IPHostEntry myScanHost = Dns.GetHostByAddress(myScanIP);
                    //获取主机的名
                    string strHostName =myScanHost.HostName.ToString();
                    textBox4.Text+=strScanIPAdd+"->"+strHostName+"\r\n";
                }
                catch //(Exception error)
                {
                    //MessageBox.Show(error.Message);                    
                }
            }

            textBox3.Text="";  
            MessageBox.Show("扫描完成");
        }

        private void Form1_Closed(object sender, System.EventArgs e)
        {
            Application.Exit();
        }

        private void textBox3_TextChanged(object sender, System.EventArgs e)
        {
        
        }
        
        private void ShowHideWindow(bool isShow)
        {
            if (isShow)
            {
                if (this.ShowInTaskbar==false)
                {
                    this.ShowInTaskbar=true;
                    this.Show();
                    this.WindowState=FormWindowState.Normal;
                }
                else
                {
                    if(this.WindowState == FormWindowState.Minimized)
                    {
                        this.WindowState = FormWindowState.Normal;
                    }
                }
                this.Activate();
            }
            else
            {
                if (this.ShowInTaskbar==true)
                {
                    this.Hide();
                    this.ShowInTaskbar=false;
                }
            }
        }
    }


使用的外部类:
using System.IO;
using System.Net;
using System.Threading;
using System.Text.RegularExpressions;

程序源码下载地址:
https://files.cnblogs.com/jhtchina/NetworkScan.rar

posted on 2006-04-10 10:30  wen   阅读(205)  评论(0)    收藏  举报

导航