摘要
想必大家對小榕時(shí)光等掃描器都非常熟悉了,有沒有自己寫一個(gè)的沖動(dòng)。最近微軟推實(shí)施了.NET戰(zhàn)略方案,C#是主推語言,你們是否有興趣用C#來實(shí)現(xiàn)對局域網(wǎng)IP地址的掃描,嘗試一下自己寫的快樂,那么請跟我來。
正文
1.先介紹一下使用的類:
DNS類:在.net中的System.net命名空間下,主要的功能是從 Internet 域名系統(tǒng) (DNS) 檢索關(guān)于特定主機(jī)的信息。
IPHostEntry類:將一個(gè)域名系統(tǒng) (DNS) 主機(jī)與一組別名和一組匹配的 IP 地址關(guān)聯(lián),和DNS類一起使用。
IPAddress 類:IP 網(wǎng)絡(luò)上的地址。
使用的命名空間有:
System.Net 命名空間為當(dāng)前網(wǎng)絡(luò)上使用的多種協(xié)議提供了簡單的編程接口.
System.IO命名空間包含允許在數(shù)據(jù)流和文件上進(jìn)行同步和異步讀取及寫入的類型。
System.Thread 命名空間主要是用來多線程序編程。
程序?qū)崿F(xiàn)以下幾個(gè)功能:
2.獲取本地主機(jī)IP地址
/// <summary> /// 按扭查詢本機(jī)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()獲取本地計(jì)算機(jī)的主機(jī)名 // Dns.GetHostByName()獲取指定 DNS 主機(jī)名的 DNS 信息 //得到本地主機(jī)的DNS信息 myHost = Dns.GetHostByName(Dns.GetHostName()); //顯示本地主機(jī)名 textBox1.Text = myHost.HostName.ToString(); //顯示本地主機(jī)的IP地址表 for(int i=0; i<myHost.AddressList.Length;i++) { richTextBox1.AppendText("本地主機(jī)IP地址->" + myHost.AddressList[i].ToString()+ "\r"); } } catch(Exception error) { MessageBox.Show(error.Message); }
}
3.遠(yuǎn)程查詢
private void button2_Click(object sender, System.EventArgs e) { this.richTextBox1.Text = ""; IPHostEntry myDnsToIP = new IPHostEntry(); //Dns.Resolve 方法: 將 DNS 主機(jī)名或以點(diǎn)分隔的四部分表示法格式的 // IP 地址解析為 IPHostEntry實(shí)例 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.實(shí)現(xiàn)網(wǎng)段的掃描
實(shí)現(xiàn)網(wǎng)段的掃描,確定網(wǎng)絡(luò)中正在使用的主機(jī)數(shù)目。這里使用了多線程技術(shù),增加了一個(gè)線程,為了防止程序掃描的時(shí)間過長,影響程序的響應(yīng)。不過在.net中由于使用了垃圾收集技術(shù)所以對線程的控制也不是很復(fù)雜的。
private void button3_Click(object sender, System.EventArgs e) { this.richTextBox1.Text = ""; //Thread 類: 創(chuàng)建并控制線程 //Thread thScan = new Thread(new ThreadStart(ScanTarget)); Thread thScan = new Thread(new ThreadStart(ScanTarget)); //Thread.Start 方法:啟動(dòng)線程 thScan.Start(); }
private void ScanTarget() { //構(gòu)造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(); //轉(zhuǎn)換成IP地址 IPAddress myScanIP = IPAddress.Parse(strScanIPAdd); try { //你可以加入自已的,增強(qiáng)功能 // Dns.GetHostByAddress 方法: 根據(jù) IP 地 //址獲取 DNS 主機(jī)信息。 IPHostEntry myScanHost = Dns.GetHostByAddress(myScanIP); //獲取主機(jī)的名 string strHostName =myScanHost.HostName.ToString(); richTextBox1.AppendText(strScanIPAdd + "->" + strHostName + "\r"); } catch(Exception error) { MessageBox.Show(error.Message); } } }
到此為止一個(gè)簡單用C#實(shí)現(xiàn)掃描器的主要功能就完成了,試一下你可以看到你的網(wǎng)絡(luò)上的主機(jī)
|