網絡安全管理技術作業-SNMP實驗報告


 

  1. 實驗要求

     

  2. 添加並開啟Windows SNMP代理組件;
  3. 編制控制台程序,接受用戶輸入的OID字符串,返回在Windows SNMP代理中的對應值;
  4. 開發GUI界面程序,使用戶可通過該程序觀察主機CPU、內存、硬盤空間、流量值;
  5. 開發閾值告警功能,用戶通過界面可設置性能閾值(如CPU),當超過閾值時自動報警。

 

  1. 實驗過程

 

  1. 安裝並開啟Windows SNMP代理組件

安裝並開啟Windows SNMP組件操作很簡單,主要是通過"打開或關閉Windows功能"這個系統工具來完成,具體步驟因操作系統而已。以Windows 7 為例,點擊開始菜單的"控制面板",在新窗口左側選擇"程序",在右側點擊"打開或關閉Windows功能",彈出如下圖所示的窗口,勾選"簡單網絡管理協議(SNMP)",包括它的子項"WMI SNMP提供程序",點擊"確定",會有幾分鍾的等待時間。

這樣Windows SNMP 服務就已經安裝好了,一般而言,這個服務也就啟動了。當然,也可以通過Windows服務管理器確認一下相應服務的運行狀態,並可以做必要的設置等操作。方法為,按快捷鍵Win + R,輸入"services.msc",打開Windows 服務管理器,如下圖。

滾動到SNMP Services,可以看到它的狀態是已啟動。在左側窗口中可以停止或重啟這個服務。

  1. 開發SnmpWatcher程序

SnmpWatcher是實現作業要求第2-4項的Windows程序。這套程序的功能本質是一個SNMP Client,對應的SNMP Sever是Windows,具體而言是前文安裝和啟動的SNMP Service程序。通過閱讀相應的RFC文檔,實現這樣一個C/S模式的客戶端,沒有什么難度,不過卻較為繁瑣,好在已經有開發者提供了一套開源的SNMP庫——SNMP Sharp Net,官方網站是http://www.snmpsharpnet.com/,開源項目代碼托管在Sourceforge,地址是http://sourceforge.net/projects/snmpsharpnet/。SnmpWatcher就使用這個庫。

    下面簡單介紹一下SnmpWatcher這個程序的開發。

開發環境和工具如下表。

開發環境和工具

設備

 
 

ASUS A41IE 筆記本電腦

軟件

 

操作系統

Windows 7 Ultimate with SP1, 32 bit(需要安裝和開啟SNMP服務)

開發工具

Microsoft Visual C# 2010 Express

網絡

 
 

可以不需要

    特別說明的是,在這個實驗的開發過程中訪問的SNMP Server是開發環境的主機,其實也可以是有網絡鏈接的其他主機,不過簡單起見,就只用了開發主機了,所以網絡可以是不需要的,在實際應用時,SNMP協議必然是運行在網絡環境中的。

項目的文件目錄如下圖所示。現在簡單說明一下主要class和namespace的設計。

  1. Program

    這個是應用程序的主類,即包含了Main方法入口。Program類保存了應用程序運行的重要數據作為自己的屬性,如SNMP HOST和COMMUNITY,同時負責在啟動時讀取配置文件"snmpwathcer.ini",這個文件設置了HOST和COMMUNITY數據和用戶界面方式命令行或圖形窗口,下面是一個"snmpwatcher.ini"的標准模版。

;This is the config file for SnmpWatcher

[SnmpWatcher]

Host=localhost

Community=public

UI=window

 

  1. 工具類

    即IniFile和SnmpWatcher,IniFile是讀取上文提到了"snmpwatcher.ini"配置文件的工具類,主要在Program類中使用。SnmpWatcher是對SnmpSharpNet進行簡單封裝的工具類,主要在Calc相關類中使用。

  2. Stat

    這個名字空間是主要提供了數據類,即對作業要求監控的CPU、內存、硬盤空間、流量值等的數據的封裝,對應的類分別是CpuStat、MemoryStat、DiskStat、NetworkStat。另外一個類Stat是這些類的基類,只作為類型的約束,沒有定義屬性和實際意義。

    各個類的屬性和含義,如下表。

數據類屬性說明

CpuStat

   
 

CoreNum:uint

CPU內核數

 

Loads:List<uint>

CPU負載數列

 

LoadRate:double

CPU負載率(負載和/100)

MemoryStat

   
 

Size:uint

內存總空間

 

UsedSize:uint

內存使用空間

 

UsedRate:double

內存使用率

DiskStat

   
 

Size:uint

磁盤總空間

 

UsedSize:uint

磁盤使用空間

 

UsedRate:double

磁盤使用率

NetworkStat

   
 

InBytes:uint

流進字節數

 

OutBytes:uint

流出字節數

 

  1. Clac類

    這個名字空間這個名字空間下有1個接口和4個類,用於和Host通信,提交含有OID的SNMP請求,讀取SNMP響應報文並作解析,獲得系統的CPU、內存、硬盤、網絡狀態數據信息,存儲到對應的Stat類中。

    接口是ICalc,接口定義如下。

interface ICalc<T> where T : Stat

{

T CalcStat();

}

其余4個類實現了這個接口,四個類分別實現的功能和使用到的OID如下表所示。

Calc類

功能

使用到的OID

含義

CpuCalc

查詢CPU狀態數據,存儲在CpuStat對象中

.1.3.6.1.2.1.25.3.3.1.2

遍歷各個CPU的內核的負載

MemoryCalc

查詢內存狀態數據,存儲在MemoryStat對象中

1.3.6.1.2.1.25.2.3.1.2

存儲單元類型

1.3.6.1.2.1.25.2.3.1.4

存儲單元大小

1.3.6.1.2.1.25.2.3.1.5

總存儲單元數

1.3.6.1.2.1.25.2.3.1.6

使用存儲單元數

1.3.6.1.2.1.25.2.1.2

內存存儲單元類型碼

DiskCalc

查詢硬盤狀態數據,存儲在DiskStat對象中

1.3.6.1.2.1.25.2.3.1.2

存儲單元類型

1.3.6.1.2.1.25.2.3.1.4

存儲單元大小

1.3.6.1.2.1.25.2.3.1.5

總存儲單元數

1.3.6.1.2.1.25.2.3.1.6

使用存儲單元數

1.3.6.1.2.1.25.2.1.4

硬盤存儲單元類型碼

NetworkCalc

查詢硬盤狀態數據,存儲在NetwrokStat對象中

1.3.6.1.2.1.2.2.1.6

物理地址

1.3.6.1.2.1.2.2.1.10

輸入字節數

1.3.6.1.2.1.2.2.1.16

輸出字節數

需要說明的是,在1.3.6.1.2.1.25.2下內存和硬盤被抽象成同一種存儲設備,通過1.3.6.1.2.1.25.2.3.1.2這個值進行類別判斷。這個過程相對比較復雜,具體解析過程,還是請查閱源代碼。

  1. UI

    這個名字空間提供了兩套用戶接口,一個是命令行的(Console1),另一個是圖形窗口的(Form1),另外的兩個類Form1Settings是對Form1數據的抽象,主要是Form1的刷新時間和CPU、內存、磁盤的告警閾值,Form1SettingsDialog是修改閾值的窗口類,Form1Settings在Form1SettingsDialog和Form1間傳遞。

    Console1,實現的功能比較簡單,主要是完成了作業的第2個要求,即通過輸入OID查詢系統狀態信息,另外提供了一個命令打開圖像窗口,使用演示如下圖所示。

    Form1實現了作業的另兩個要求,使用演示如下圖。

    這個窗口顯示監視主機的狀態信息,可以驗證和當前主機的實際信息是一致的,除了CPU會有些誤差,這個誤差出現的原因,我還在思考中。

    點擊Settings進入設置對話框。把Memory Threshold設為50以后點OK,返回主界面,這時等待刷新,然后可以看到狀態欄出現了"WARNING"的紅色警告。

    

  1. 附:SnmpWatcher程序源代碼

    我把SnmpWatcher的源代碼放到了Bitbucket上,可以通過hg下載全部源代碼,命令如下:

hg clone https://bitbucket.org/tt_0411_09/snmpwatcher

當然也可以在Bitbucket上在線查看,地址是:

https://bitbucket.org/tt_0411_09/snmpwatcher/src

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM