藍(lán)敏
摘 要 本文對系統(tǒng)的本機基本信息查詢、流量監(jiān)控以及進(jìn)程顯示三個功能進(jìn)行詳細(xì)的設(shè)計及描述,并對系統(tǒng)實現(xiàn)的代碼及界面進(jìn)行介紹。
關(guān)鍵詞 網(wǎng)卡 流量 監(jiān)控
中圖分類號:TP3 文獻(xiàn)標(biāo)識碼:A
目前的網(wǎng)絡(luò)監(jiān)控軟件,如360安全衛(wèi)士的網(wǎng)絡(luò)監(jiān)控、網(wǎng)路崗等都是針對網(wǎng)絡(luò)流量的,而網(wǎng)絡(luò)流量跟網(wǎng)卡流量是有區(qū)別的,對于個人用戶來說,網(wǎng)卡流量的狀態(tài)也可以從一定程度上體現(xiàn)帶寬使用的情況。本系統(tǒng)采用面向?qū)ο蟮能浖_發(fā)辦法,以Microsoft公司的可視化集成開發(fā)環(huán)境 Visual Studio .Net 作為開發(fā)平臺,以C#作為開發(fā)語言實現(xiàn)網(wǎng)卡流量監(jiān)控的功能。
1功能設(shè)計
(1)本機基本信息查詢:查看IP地址:主要查看本機在局域網(wǎng)內(nèi)中的IP地址;查看主機名:用于查看本機計算機的名稱;查看MAC地址:查看網(wǎng)卡的唯一地址。
(2)流量監(jiān)控:獲取到本機的網(wǎng)卡列表,然后針對某塊網(wǎng)卡進(jìn)行動態(tài)的流量監(jiān)控,并顯示出來。
2 功能實現(xiàn)
2.1 本地信息查詢功能實現(xiàn)
(1)查詢IP地址:這個功能需要使用到 System.Net命名空間,在C#編程中,可利用它提供的DNS類獲取IP地址,主要代碼如下:
IPAddress[] addresslist=Dns.GetHostAddresses(Dns.GetHostName());
for (int i = 1; i < addresslist.Length; i++)
{ipaddress += addresslist[i].ToString() + "";}
tbIP.Text = ipaddress.ToString() + "";
上面的代碼就是利用了DNS類,它主要是從域名系統(tǒng)中查找關(guān)于指定主機的信息,通過Dns.GetHostAddresses(Dns.GetHostName())得到指定主機的IP地址,并把它賦予IPAddress[]類中的變量,再把它在文本框中顯示出來。
(2)查詢主機名:這部分功能與上面的IP地址功能類似,也通過System.Net命名空間和DNS類來從域名系統(tǒng)中獲得主機名,最主要的還是通過DNS類來實現(xiàn)。
(3)查詢MAC地址:在獲取本地MAC地址時,可以使用WMI規(guī)范,在.NET框架中,WMI規(guī)范的實現(xiàn)定義在System.Management命名空間中,但要使用該命名空間就必須先引用該程序指令集,所以在右側(cè)右擊引用,選擇添加引用,在.NET中找到System.Management即可。主要代碼如下:
ManagementObjectCollection mc = mac.GetInstances();
{if ((bool)m["IPEnabled"] == true)
tbMAC.Text += m["MacAddress"].ToString() + "\n";
m.Dispose();}
通過ManagementClass類來提取MAC地址信息,再用ManagementObjectCollection類來檢索并返回對象的集合,通過循環(huán)來找到MAC地址字段值,并在文本框中顯示。
2.2 流量監(jiān)控功能的實現(xiàn)
這個模塊的功能也可分為兩個小模塊,分別是獲取網(wǎng)卡列表和對指定的網(wǎng)卡進(jìn)行流量監(jiān)控。
(1)獲取網(wǎng)卡列表
主要代碼如下:
monitor = new NetworkMonitor();
if (adapters.Length == 0)
{this.listadapters.Enabled = false;
return;}
this.listadapters.Items.AddRange(this.adapters);
(2)監(jiān)控指定的網(wǎng)卡
if (this.listadapters.SelectedIndex < 0)
{MessageBox.Show("請指定要監(jiān)控的網(wǎng)卡", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.timercounter.Stop();
}
else
this.timercounter.Start();
上述代碼是防止在沒有選擇網(wǎng)卡項的情況下而實現(xiàn)的,if語句判斷有沒有選中指定的網(wǎng)卡,如果沒有選擇,則this.listadapters.SelectedIndex等于-1,即小于0,反之就會觸發(fā)計數(shù)器對指定網(wǎng)卡進(jìn)行監(jiān)控。
NetworkAdapter adapter = this.adapters[this.listadapters.SelectedIndex];
this.down.Text=string.Format("{0:n}kbps",adapter.DownloadSpeedKbps;
nsc1.Value = (int)adapter.UploadSpeed / 100;
nsc2.Value = (int)adapter.DownloadSpeed / 100;
上面一部分也是通過調(diào)用monitor.StopMonitoring()和monitor.StartMonitoring()來實現(xiàn)對列表框中的指定網(wǎng)卡進(jìn)行監(jiān)控,中間的命令是當(dāng)選中指定網(wǎng)卡后開始執(zhí)行監(jiān)控,調(diào)用計數(shù)器,在這個過程中,又通過調(diào)用format把NetworkMonitor中的adapter.UploadSpeedKbps(上傳流量)和adapter.DownloadSpeedKbps(下載流量)轉(zhuǎn)換成{0:n} kbps格式,并且把流量在波形控件中顯示,從而實現(xiàn)對指定網(wǎng)卡的流量監(jiān)控。
參考文獻(xiàn)
[1] 陸晟,龔儉.網(wǎng)絡(luò)安全監(jiān)測的集成管理[J].東南大學(xué)學(xué)報,2009(05).