




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課程設計任務書20092010學年第一學期專業: 計算機應用技術 學號: 070601197 姓名: 李俊蕾 課程設計名稱: 計算機網絡課程設計 設計題目: 編程簡單實現snmp 完成期限:自 2009 年 12 月 7日至 2009 年 12 月 14 日共 1 周設計目的: snmp是簡單網絡管理協議,主要用來管理網絡設備到目前為止幾乎所有的網絡產品都要為其提供支持,以方便管理員的管理和軟件開發人員的開發。我們來研究有關snmp編程,以便更好的運用。 功能要求: 程序能夠用snmp編程實驗管理網絡設備。 1、 設計的任務:熟悉snmp的基本理論,基于vc+6.0下,有關snmp編程的過程及
2、api函數的用法。 2、 開發工具: c+ 語言 3、 進度安排:序號階段內容所需時間1布置任務及調研2天2系統分析與設計2天3調試及報告撰寫2天合 計6天4、 主要參考資料:1岑賢道. 網絡管理協議及應用開發m.清華大學出版社.1998.2邢國光. 簡單網絡管理協議的理論與實踐m.國防工業出版社.1999.3陳慶章. 網絡原理與技術m.高等教育出版社. 20054晏國晟. 簡單網絡管理 m.清華大學出版社.20045 譚浩強. 程序設計(第二版)m.清華大學出版社,2000指導教師(簽字): 教研室主任(簽字): 批準日期: 年 月 日摘 要snmp(simple network manag
3、ement protocol,簡單網絡管理協議)的前身是簡單網關監控協議(sgmp),用來對通信線路進行管理。隨后,人們對sgmp進行了很大的修改,特別是加入了符合internet定義的smi和mib:體系結構,改進后的協議就是著名的snmp。snmp的目標是管理互聯網internet上眾多廠家生產的軟硬件平臺,因此snmp受internet標準網絡管理框架的影響也很大。現在snmp已經出到第三個版本的協議,其功能較以前已經大大地加強和改進了。snmp的體系結構是圍繞著以下四個概念和目標進行設計的:保持管理代理(agent)的軟件成本盡可能低;最大限度地保持遠程管理的功能,以便充分利用inte
4、rnet的網絡資源;體系結構必須有擴充的余地;保持snmp的獨立性,不依賴于具體的計算機、網關和網絡傳輸協議。在最近的改進中,又加入了保證snmp體系本身安全性的目標。關鍵詞: snmp;簡單網絡管理協議目 錄1 snmp的概述12 課程設計的主要內容及過程22.1加載snmp22.2 建立會話22.3 設置傳輸模式32.4 創建實體32.5 設置重傳模式32.6 設置超時時間32.7 設置重傳次數42.8創建上下文句炳42.9 創建變量捆綁列表42.10 追加綁定列表52.11 創建pdu63 接收消息并處理73.1 接收消息73.2 提取數據報73.3 計算返回列表數目83.4 取得返回結
5、果84 程序代碼8總 結11主要參考文獻121 snmp的概述snmp開發于九十年代早期,其目的是簡化大型網絡中設備的管理和數據的獲取。許多與網絡有關的軟件包,如hp的openview和nortel networks的optivity network management system,還有multi router traffic grapher(mrtg)之類的免費軟件,都用snmp服務來簡化網絡的管理和維護。由于snmp的效果實在太好了,所以網絡硬件廠商開始把snmp加入到它們制造的每一臺設備。今天,各種網絡設備上都可以看到默認啟用的snmp服務,從交換機到路由器,從防火墻到網絡打印機,無
6、一例外。僅僅是分布廣泛還不足以造成威脅,問題是許多廠商安裝的snmp都采用了默認的通信字符串(例如密碼),這些通信字符串是程序獲取設備信息和修改配置必不可少的。采用默認通信字符串的好處是網絡上的軟件可以直接訪問設備,無需經過復雜的配置。通信字符串主要包含兩類命令:get命令,set命令。get命令從設備讀取數據,這些數據通常是操作參數,例如連接狀態、接口名稱等。set命令允許設置設備的某些參數,這類功能一般有限制,例如關閉某個網絡接口、修改路由器參數等功能。但很顯然,get、set命令都可能被用于拒絕服務攻擊(dos)和惡意修改網絡參數。最常見的默認通信字符串是public(只讀)和priva
7、te(讀/寫),除此之外還有許多廠商私有的默認通信字符串。幾乎所有運行snmp的網絡設備上,都可以找到某種形式的默認通信字符串。snmp 2.0和snmp 1.0的安全機制比較脆弱,通信不加密,所有通信字符串和數據都以明文形式發送。攻擊者一旦捕獲了網絡通信,就可以利用各種嗅探工具直接獲取通信字符串,即使用戶改變了通信字符串的默認值也無濟于事。近幾年才出現的snmp 3.0解決了一部分問題。為保護通信字符串,snmp 3.0使用des(data encryption standard)算法加密數據通信;另外,snmp 3.0還能夠用md5和sha(secure hash algorithm)技術
8、驗證節點的標識符,從而防止攻擊者冒充管理節點的身份操作網絡1。雖然snmp 3.0出現已經有一段時間了,但目前還沒有廣泛應用。如果設備是2、3年前的產品,很可能根本不支持snmp 3.0;甚至有些較新的設備也只有snmp 2.0或snmp 1.0。即使設備已經支持snmp 3.0,許多廠商使用的還是標準的通信字符串,這些字符串對黑客組織來說根本不是秘密。因此,雖然snmp 3.0比以前的版本提供了更多的安全特性,如果配置不當,其實際效果仍舊有限。2 課程設計的主要內容及過程和其他編程過程一樣,整個snmp編程也要經過一個創建,執行,銷毀的過程,通俗點說就是要做準備,初始化snmp環境即加載sn
9、mp的功能,接著就要執行所進行的操作,snmp是基于消息機制的,所以消息傳遞與管理是我們在編程中所必須注意的問題,最后要進行銷毀和回收資源2。2.1加載snmp用到的函數是snmpstartup(smilpuint32 nmajorversion,milpuint32 nminorversion,smilpuint32 nlevel,smilpuint32 ntranslatemode,smilpuint32 nretransmitmode);五個參數作為接收參數返回snmp的主版本號,副版本號,支持最高的操作標準,默認的實體/上下文傳輸模式,默認的重發機制。2.2 建立會話用到的函數是hsn
10、mp_session snmpopen( hwnd hwnd, / handle to the notification windowuint wmsg / window notification message number);或hsnmp_session snmpcreatesession(hwnd hwnd, / handle to the notification windowuint wmsg, / window notification message numbersnmpapi_callback pfncallback, / notification callback funct
11、ionlpvoid lpclientdata / pointer to callback function data);第二個函數并沒有被完全確定下來,在編程過程中不是基于windows的編程提供一種選擇,第一個參數指向接收消息的窗口句炳,第二個參數則指向該窗口需要接收的消息碼。2.3 設置傳輸模式用到的函數是snmpapi_status snmpsettranslatemode(smiuint32 ntranslatemode / new entity/context translation mode);該函數只有一個參數,有以下幾種選擇:snmpapi_translated 不常用snmp
12、api_untranslated_v1 版本v1snmpapi_untranslated_v2 版本v2 2.4 創建實體用到的函數是hsnmp_entity snmpstrtoentity(hsnmp_session session, / handle to the winsnmp sessionlpcstr string / pointer to a string that identifies/ the entit);該函數的第一個參數是第二步返回的會話句炳,第二個參數與在第三步中設置的傳輸模式有關,如果選后兩個參數,那么這里的string就是你要發送消息的網絡設備ip地址或接收消息的管
13、理設備ip地址。該函數返回一個實體句炳。2.5 設置重傳模式用到的函數是snmpapi_status snmpsetretransmitmode(smiuint32 nretransmitmode / new retransmission mode); 該函數只有一個參數,有以下兩種選擇:snmpapi_on 啟動重傳模式snmpapi_off 關閉重傳模式2.6 設置超時時間用到的函數是snmpapi_status snmpsettimeout(hsnmp_entity hentity, / destination management entitysmitimeticks npolicyt
14、imeout / new time-out value for database);該函數的第一個參數是第四步返回的實體句炳,通常我們設置目標實體的超時時間,也就是接收消息的網絡設備的實體。第二個參數是超時的時間。2.7 設置重傳次數用到的函數是snmpapi_status snmpsetretry(hsnmp_entity hentity, / destination management entitysmiuint32 npolicyretry / new retry count value for database);該函數的第一個參數是第四步返回的實體句炳,通常我們設置目標實體的重傳次
15、數,也就是接收消息的網絡設備的實體。第二個參數是重傳次數。2.8創建上下文句炳用到的函數是hsnmp_context snmpstrtocontext(hsnmp_session session, / handle to the winsnmp sessionsmilpcoctets string / pointer to a string structure);該函數的第一個參數是第二步返回的會話句炳,第二個參數與你在第三步中設置的傳輸模式有關,如果你選則后兩個參數,那么這里的string就是共同體名。該函數返回一個上下文句炳。2.9 創建變量捆綁列表用到的函數是hsnmp_vbl snmp
16、createvbl(hsnmp_session session, / handle to the winsnmp sessionsmilpcoid name, / pointer to the variable namesmilpcvalue value / pointer to the value to associate / with the variable);由上述,該函數的第一個參數是第二步返回的會話句炳,而其他兩個參數開始時就可以置為空了。該函數返回一個綁定列表句炳。2.10 追加綁定列表用到的函數是snmpapi_status snmpsetvb(hsnmp_vbl vbl, /
17、 handle to the variable bindings listsmiuint32 index, / position of the variable binding entry / in the listsmilpcoid name, / pointer to the variable name portion / of the entrysmilpcvalue value / pointer to the variable value portion / of the entry);可以看到這個函數的后兩個參數與snmpcreatevbl相同,先看第一個結構,就是smilpcoi
18、d中的oid,他的意思是對象標志符,就是一個指向smioid的指針類型3。看看他的內部構造:typedef struct smiuint32 len; / number of array elementssmilpuint32 ptr; / pointer to an array of subidentifiers smioid, *smilpoid;由上面的推理,可以得出是一個指向smivalue的指針類型。讓我們來看看smivalue結構。typedef struct / smivalue portion of varbindsmiuint32 syntax; / insert snmp_
19、syntax_ union smiint snumber; / snmp_syntax_int / snmp_syntax_int32 smiuint32 unumber; / snmp_syntax_uint32 / snmp_syntax_cntr32 / snmp_syntax_gauge32 / snmp_syntax_timetickssmicntr64 hnumber; / snmp_syntax_cntr64 smioctets string; / snmp_syntax_octets / snmp_syntax_bits / snmp_syntax_opaque / snmp_
20、syntax_ipaddr / snmp_syntax_nsapaddrsmioid oid; / snmp_syntax_oid smibyte empty; / snmp_syntax_null / snmp_syntax_nosuchobject / snmp_syntax_nosuchinstance / snmp_syntax_endofmibview value; / union smivalue, *smilpvalue;從整體上看,該結構有兩個類型構成,一個是smiuint32 syntax; 另一個共同體類型。2.11 創建pdu將數據發送到目的地,必須其按照特定的格式來發送
21、,用函數hsnmp_pdu snmpcreatepdu(hsnmp_session session, / handle to the winsnmp sessionsmiint pdu_type, / pdu typesmiint32 request_id, / pdu request identifiersmiint error_status, / valid only for snmp_pdu_getbulk requestssmiint error_index, / valid only for snmp_pdu_getbulk requestshsnmp_vbl varbindlist
22、 / handle to the variable bindings list);來完成該功能。用下面的函數snmpapi_status snmpsendmsg(hsnmp_session session, / handle to the winsnmp sessionhsnmp_entity srcentity, / handle to the source entithsnmp_entity dstentity, / handle to the target entityhsnmp_context context, / handle to the contexthsnmp_pdu pdu
23、/ handle to the pdu); 3 接收消息并處理3.1 接收消息用函數snmpapi_status snmprecvmsg(hsnmp_session session, / handle to the winsnmp sessionlphsnmp_entity srcentity, / handle to the source entitylphsnmp_entity dstentity, / handle to the target entitylphsnmp_context context, / handle to the contextlphsnmp_pdu pdu / h
24、andle to the pdu);該函數的參數和snmpsendmsg好像是一樣的,但參數的進出不一樣,snmprecvmsg除第一個參數是創建過的以外,其他參數都是輸出參數,就是用來接收的參數4。3.2 提取數據報用函數snmpapi_status snmpgetpdudata(hsnmp_pdu pdu, / handle to the pdusmilpint pdu_type, / pdu_type field of the pdusmilpint32 request_id, / request_id field of the pdusmilpint error_status, / e
25、rror_status field of the pdusmilpint error_index, / error_index field of the pdulphsnmp_vbl varbindlist / handle to the variable bindings list);第一個參數是需要輸入的,而這已經通過snmprecvmsg得到了,其他的參數都是需要接收的,request_id,如果用異步接收的話,可以幫你標識發送的消息。還有error_status和error_index,用在snmp_pdu_getbulk操作中,他們的意義是不同的,除此之外,他們用來接收snmp端返回
26、的錯誤消息,如果返回全都是0,那就是正確返回了。3.3 計算返回列表數目用函數snmpapi_status snmpcountvbl(hsnmp_vbl vbl / handle to the variable bindings list);將上一步得到的varbindlist代入,他的返回只是一個整型,所得到的變量綁定列表返回的變量數。3.4 取得返回結果用函數snmpapi_status snmpgetvb(hsnmp_vbl vbl, / handle to the variable bindings listsmiuint32 index, / position of the vari
27、able binding entry / in the listsmilpoid name, / pointer to the structure to receive the / variable namesmilpvalue value / pointer to the structure to receive the / associated value);上一步已經得到了結果數,用一個簡單的for循環一次將結果取出。該函數有四個參數,第一個在第三步已得到,第二個就是for循環中的變量值,記住取得變量是從0開始的,后兩個參數與前面某個函數的參數有點相似。5前面把他們都置為空,現在snmp
28、代理將返回值添了進去,定義兩個變量,接收就行。對ip地址的接收會有點不同,返回值將其封裝為一個指針數組了,需要一個一個的取出來!只有會話句炳是在發送和接收消息時都用到的,所以在發送和接收消息以后,要將其他四個句炳釋放掉,應該在你應用程序退出的過程中釋放掉,創建會話句炳的位置在構造函數里。以上這些釋放句炳資源的函數snmp api都有提供,如snmpfreeentity,snmpfreecontext,snmpfreevbl,snmpfreepdu,snmpclose,他們的參數只有一個,就是要是放得句炳。4 程序代碼#include#include#include#include#includ
29、e#include#include#includewsnmputil.h/外部全局變量gvars,記錄用戶命令等信息globalvarsgvars;int main(intargc,char*argv)/初試化一般參數psnmp_mgr_sessionpsession=null;intnreturn=0;boolresult;inti=0;/初試化snmp參數smiuint32nmajorversion=0;smiuint32nminorversion=0;smiuint32nlevel=0;smiuint32ntranslatemode=0;smiuint32nretransmitmode=
30、0;/加載snmp服務snmpstartup(&nmajorversion,&nminorversion,&nlevel,&ntranslatemode,&nretransmitmode);/分兩種情況設置傳輸模式(snmp1/snmp2)if(gvars.version=false)snmpsettranslatemode(snmpapi_untranslated_v1);elsesnmpsettranslatemode(snmpapi_untranslated_v2);/為會話分配內存空間psession=(psnmp_mgr_session)snmputilmemalloc(sizeof(snmp_mgr_session)); createnotificationwindow(psession);/建立會話snmpopen(psession-hwnd,wm_snmp_incoming);/解析用戶在命令行輸入的命令switch(gvars.operation)casetrap:waitfortraps(psession);break;casewalk:createpdusendrequest(psession
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國家用電動扳手行業市場全景分析及前景機遇研判報告
- 設備裝配單位管理制度
- 設計開發評審管理制度
- 2025年中國機器人集成行業市場全景分析及前景機遇研判報告
- 診所衛生應急管理制度
- 診所藥房員工管理制度
- 試驗人員考核管理制度
- 財務費用報銷管理制度
- 財政罰款票據管理制度
- 貨場淘汰設備管理制度
- 初一幾何綜合練習題
- DBJ∕T 13-261-2017 福建省二次供水不銹鋼水池(箱)應用技術規程
- GB∕T 16422.3-2022 塑料 實驗室光源暴露試驗方法 第3部分:熒光紫外燈
- 新建區2018年中小學(幼)教師、特崗教師
- 中國歷史地理復習資料
- 05示例:玉米脫粒機的設計(含全套CAD圖紙)
- 冷庫項目施工組織設計方案
- 年中總結會策劃方案
- (最新)污水處理池施工方案
- 肺膿腫護理查房ppt課件
- 我要建一座王宮(正譜)
評論
0/150
提交評論