標籤:style blog http 使用 ar 檔案 資料 2014 問題
SNMP代理模組包括6個子模組:
SNMP協議主要有五種報文get、get-next、set、get-response,trap。
l.get-request操作:從代理進程處提取一個或多個參數值
2.get-next-request操作:從代理進程處提取緊跟當前參數值的下一個參數值
3.set-request操作:設定代理進程的一個或多個參數值
4.get-response操作:返回的一個或多個參數值。這個操作是由代理進程發出的,它是前面三種操作的響應操作。
5.trap操作:代理進程主動發出的報文,通知管理進程有某些事情發生。其中前三種報文是管理進程發出的;後兩種是代理進程發出的。在代理進程端是用熟知連接埠161倆接收get或set報文,而在管理進程端是用熟知連接埠162來接收trap報文。 下面具體講解5種SNMP操作。
(1) get-request操作 管理站需要主動向agent讀取管理對象的值,以獲得裝置或網路的運行資料和管理資訊,進而規劃網路管理。SNMP不支援一次讀取一張表或表中一行資料。但是當需要讀取多個資料,如果分多次讀取則會提高網路負擔,所以,Get-Request支援一次提交多個對象標識(OID),以便一次擷取他們的值,提高網路利用率。
(2) get-next-request操作SNMP不支援一次讀取一張表或表中一行資料的讀取,Get-Next-Request提供了一種簡單的方法。對一個OID進行Get-Next-Request操作,將會收到一個下一個可讀取的對象的執行個體標識,接著對他Get-Next-Request將會得到再下一個執行個體標識,不斷執行下去,將可以讀取完整張表。一方面Get-Next-Request實現很簡單,但是在讀取表中資料的時候卻不可避免地有一個大麻煩。表中的資料是以行為單位,每一行又由若干列組成,如果讀取一行資料,應該讀取這一行的每一列,但是SNMP的Get-Next-Request表時是先列後行,就是說先把第一列中所有行資料讀取完,再讀取下一列所有行。這樣,用戶端就需要做很多工作。另一方面,這樣顯然傳遞了很多不必要的資料,浪費了頻寬。跟Get-Request一樣,Get-Next-Request可以在PDU裡綁定多個OID或執行個體標識,以提高效率。同樣的,綁定多個OID情況下,相應的Get-Response的PDU同樣會返回每一個OID的下一個可用執行個體標識標識符或相應錯誤。利用綁定多個OID可以比單個執行Get-Next-Request有效率。
(3) set-request操作網路管理中,有時需要對裝置的一些參數、配置、狀態進行重新設定。需要一種遠端管理機制,Set-Request就是這樣的操作。set操作可以對MIB中許可權為:write-only、read-write的對象進行set操作。儘管set操作為改變更配置置提供了一種比較方便的方法,但是SNMP並沒有直接提供操作遠程裝置的操作。但這不代表SNMP沒有這種能力,我們可以藉助於Set-Request操作間接地實現這一效能。裝置通過MIB定義一個操作的對象,類型為write-only或read-write,約定操作取值,NMS可以對這個對象進行設定,裝置以自己的方式得知此對象的值改變後,可以按照對象取值的含義執行操作,從而實現遠端控制。set操作也允許一次提供幾個set的對象和值,以便在一個PDU裡操作多個對象。set操作的成功應答包裡包含設定的對象的最新取值(也就是設定的值)。
(4) get-response操作GetResponse對get、set、getNext進行應答,由agent被動地產生並發出。當操作成功地被執行時,GetResponsePDU裡包含操作中請求操作的對象oid和他們的值。前面提到,前三種操作都支援在一個PDU裡綁定多個對象,相應的GetResponse應答也包含相應變數的值。對於失敗的操作,GetResponse需要在PDU裡標註相應的錯誤碼。GetResponse對請求資料包裡的request-id域不操作,原數返回,以使請求端能將應答包和請求包準確匹配,同時也可以作為請求和接收方校正重複資料包的依據。當操作成功時,error-status值為noError,error-index為0。variablebindings中的變數的value域填上相應值。當操作失敗時,error-status為相應的錯誤碼,如果錯誤由variablebindings組中某個對象引起,則error-index為該對象在variablebindings中的索引。
(5) trap操作SNMP的前三種操作是NMS主動發起的操作,網路中存在大量的裝置,NMS輪循一次需要一段時間,如果裝置發生了重要的狀態改變,等到下一次輪循到來,可能已經失去即時性,NMS不能及時掌握裝置資料或狀態的變化。另一方面,考慮到對網路的佔用,又不可能以很小的間隔去輪循裝置。所以,需要一種機制讓裝置能夠自主地發出警報,通知狀態或配置的改變和其它一些重要事件。Trap就是由agent主動發出的警報PDU,通知NMS重要的改變。RFC 1157中定義了5種常見類型的Trap,用於這些常見網路狀態的警示。另外提供了一個自訂的類型,並提供一個PDU單元提供自訂Trap的子代碼,用於SNMP的實現者定義和發送自己的Trap。另一方面,但Trap也有一些問題,因為SNMP使用的是UDP,不需連線的資料報,Trap有可能不能傳遞到NMS,另一方面agent不知道NMS是否收到Trap。另外,發送Trap一般都是由重要的狀態引起的,某些情況下,系統發生了災難性的故障,導致Trap也無法發出,比如系統崩潰、網路故障等。所以,一個網路管理系統要綜合使用這些操作,互為補充,才能建立一個可靠的管理系統。單獨依靠每一種操作都有片面性。
開發流程:
使用MG-SOFT生產相應MIB檔案,使用SMI設定資料類型、讀寫等,將該檔案插入相應的節點;
使用MIB2C命令將MIB檔案轉換為C檔案;
生產的C檔案,會將SIM的資料類型轉換為C語言中的資料類型;同時根據資料類型功能的不同生產,Set/Get Request 等該函數
開發完這些函數後,燒寫入交換器中
在對應節點下使用MG-Soft發送PDU(UDP),使用UDP是因為:UDP協議效率較高,用它實現網路管理不會太多地增加大網路負載
在交換器中的代理軟體受到PDU後,將SMI資料類型轉換為C資料類型;並根據PDU中的資訊執行相應的操作;
操作完成後,一般發送getResponse,告知管理軟體,修改完以後的狀態
測試流程:
開發完成後,交換器就如普通的路由器,電腦串連交換器後會出現一個設定頁面;
通過使用Python+Selenium可實現自動化設定WEB上的元素;
設定完成後重啟交換器,檢驗設定的元素的屬性是否發生改變。
SNMP代理軟體開發