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