C#中實(shí)現(xiàn)網(wǎng)段掃描的代碼
想必大家對(duì)小榕時(shí)光等掃描器都非常熟悉了,有沒有自己寫一個(gè)的沖動(dòng)。最近微軟推實(shí)施了.NET戰(zhàn)略方案,C#是主推語(yǔ)言,你們是否有興趣用C#來實(shí)現(xiàn)對(duì)局域網(wǎng)IP地址的掃描,嘗試一下自己寫的快樂,那么請(qǐng)跟我來。
正文
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é)議提供了簡(jiǎn)單的編程接口.
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í)間過長(zhǎng),影響程序的響應(yīng)。不過在.net中由于使用了垃圾收集技術(shù)所以對(duì)線程的控制也不是很復(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è)簡(jiǎn)單用C#實(shí)現(xiàn)掃描器的主要功能就完成了,試一下你可以看到你的網(wǎng)絡(luò)上的主機(jī),有沒有成就感了:)
- C#基于Twain協(xié)議調(diào)用掃描儀,設(shè)置多圖像輸出模式(Multi image output)
- C#實(shí)現(xiàn)掃描槍掃描二維碼并打印(實(shí)例代碼)
- 基于C#實(shí)現(xiàn)的端口掃描器實(shí)例代碼
- c#掃描圖片去黑邊(掃描儀去黑邊)
- asp.net(C#)生成Code39條形碼實(shí)例 條碼槍可以掃描出
- c# 可疑文件掃描代碼(找到木馬)(簡(jiǎn))
- c# 生成文字圖片和合并圖片的示例
- C#利用iTextSharp組件給PDF文檔添加圖片/文字水印
- C#實(shí)現(xiàn)在底圖上動(dòng)態(tài)生成文字和圖片
- C#生成Word文件(圖片、文字)
- 如何使用C#掃描并讀取圖片中的文字
相關(guān)文章
在WPF中實(shí)現(xiàn)平滑滾動(dòng)的方法詳解
這篇文章介紹了WPF實(shí)現(xiàn)平滑滾動(dòng)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06C# WinForm狀態(tài)欄實(shí)時(shí)顯示當(dāng)前時(shí)間(窗體狀態(tài)欄StatusStrip示例)
這篇文章主要介紹了C# WinForm狀態(tài)欄實(shí)時(shí)顯示當(dāng)前時(shí)間(窗體狀態(tài)欄StatusStrip示例),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01C#使用InstallerProjects打包桌面應(yīng)用程序的完整步驟
這篇文章主要給大家介紹了關(guān)于C#使用InstallerProjects打包桌面應(yīng)用程序的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07DevExpress設(shè)置TreeList圖片節(jié)點(diǎn)背景色的方法
這篇文章主要介紹了DevExpress設(shè)置TreeList圖片節(jié)點(diǎn)背景色的方法,需要的朋友可以參考下2014-08-08DevExpress GridControl實(shí)現(xiàn)根據(jù)RowIndex和VisibleColumnsIndex來獲取單元格
這篇文章主要介紹了DevExpress GridControl實(shí)現(xiàn)根據(jù)RowIndex和VisibleColumnsIndex來獲取單元格值,需要的朋友可以參考下2014-08-08Unity 實(shí)現(xiàn)給物體動(dòng)態(tài)添加事件
這篇文章主要介紹了Unity 實(shí)現(xiàn)給物體動(dòng)態(tài)添加事件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04C#實(shí)現(xiàn)將記事本中的代碼編譯成可執(zhí)行文件的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將記事本中的代碼編譯成可執(zhí)行文件的方法,很實(shí)用的技巧,需要的朋友可以參考下2014-08-08C#使用自定義算法對(duì)數(shù)組進(jìn)行反轉(zhuǎn)操作的方法
這篇文章主要介紹了C#使用自定義算法對(duì)數(shù)組進(jìn)行反轉(zhuǎn)操作的方法,涉及C#針對(duì)數(shù)組操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04