日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SNMP介绍

發布時間:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SNMP介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1. SNMP概覽

簡單網絡管理協議(SNMP-Simple Network Management Protocol)是一個與網絡設備交互的簡單方法。該規范是由IETF在1990年五月發布的RFC 1157中定義的。SNMP通常被認為相當難懂,并且過于復雜,其可用的API似乎在本來非常簡單的東西外面封裝了大量的東西。現在關于SNMP的書籍又 往往只是把它更加復雜化了,而沒有解釋清楚。


SNMP對于任何程序設計人員來說是特別易于理解的。總體的簡化能夠很好地把這個系統簡化。一個網絡設備以守護進程的方式運行SNMP代理,該守護進程能 夠響應來自網絡的各種請求信息。該SNMP代理提供大量的對象標識符(OID-Object Identifiers)。一個OID是一個唯一的鍵值對。該代理存放這些值并讓它們可用。一個SNMP管理器(客戶)可以向代理查詢鍵值對中的特定信 息。從程序員的角度看,這和導入大量的全局變量沒有多少區別。SNMP的OID是可讀或可寫的。盡管向一個SNMP設備寫入信息的情況非常少,但它是各種 管理應用程序用來控制設備的方法(例如針對交換機的可管理GUI)。SNMP中有一個基本的認證框架,能夠讓管理員發送公共名來對OID讀取或寫入的認 證。絕大多數的設備使用不安全的公共名 "public" 。 SNMP協議通過UDP端口161和162進行通信的。


注意,我還沒有提到MIB!MIB的重要性被大大地夸大了。剛開始時,MIB顯得非常復雜,但是它們其實非常簡單。OID是數字的和全局的鍵值對。一個 OID看起來和一個IPv6的地址很象,并且不同的廠商有不同的前綴等信息。OID都非常長,使得人們難以記住,或者對他非常感冒。因此,人們就設計了一 種將數字OID翻譯為人們可讀的格式。這種翻譯映射被保存在一個被稱為 “管理信息基礎"(Management Infomation Base) 或MIB的、可傳遞的無格式文本文件里。使用SNMP或者向SNMP設備查詢,你不需要使用MIB,但是,如果沒有MIB,你就得猜測你正在查看的數據是 什么。某些情況下,不使用MIB也非常簡單,例如查看主機名、磁盤使用率數字,或者端口狀態信息。其他情況下,就非常困難了,這個時候使用MIB就非常有 幫助。對于準備編寫的應用程序來說,為了讓用戶避免妥當安裝MIB帶來的麻煩,而嚴格使用數字OID是并不是很少見的。安裝一個MIB的動作,只是將他放 置到你的SNMP客戶端應用軟件能夠搜索到并進行上述翻譯映射工作的某個位置而已。


SNMP可以按照兩種方式來使用:輪詢和陷阱。輪詢就是說你編寫一個應用程序能夠設置一個發送給一個SNMP代理查看某些值的SNMP GET請求。這種方法非常有用,因為如果該設備響應了請求,你就得到了你需要的信息,如果該設備沒有響應請求,你就能夠知道存在某些問題。輪詢是網絡監控 的一種主動形式。另一方面,SNMP陷阱能夠被用來進行被動形式的網絡監控。SNMP陷阱是通過配置SNMP設備的代理,讓他在某些動作發生時聯系另一個 SNMP代理來實現的。


我們來進一步研究SNMP陷阱,像路由器這樣的網絡設備,可以配置為在某些事件發生時發送SNMP陷阱。例如,你可以配置Cisco的IOS在某個獨立事 件(例如鏈路斷開)發生時,或者在任何定義的陷阱事件發生時,發送SNMP陷阱。(IOS:snmp服務器開啟了鏈路斷開的snmp陷阱)。當陷阱事件發 生時,設備中的snmp代理會發送該陷阱到一個預先配置好的通常成為陷阱主機的目標上。陷阱主機會運行有自己的SNMP代理,該代理能夠接受并處理傳入的 陷阱。這些陷阱的處理由陷阱處理器來完成。陷阱處理器可以用任何語言編寫,并且可以通過STDIN(標準輸入)傳入的來自發送陷阱的信息。該處理器之后可 以根據陷阱進行任何想作的事情,例如發送郵件或者你想要的任何事情。


SNMP被廣泛應用在NMS網絡管理系統中(Network Management System)。知名的NMS包括BMC的Patrol、CA的Unicenter、Sun Mangegement控制臺、IBM的Tivoli Netview、以及全球著名的HP Openview。NMS的目標是提供一個監控和管理所有開啟SNMP功能的設備的單一入口。通過配置你的設備代理來接受寫訪問,你可以從一個應用程序中 處理你的網絡環境。如果你的整個環境圍攏NMS解決方案架構你的環境,你就能無限制地控制、查看你的整個網絡。盡管Net-SNMP提供了可用來構建你自 己的NMS網管系統的所有工具,我們不會再進一步討論關于NMS的話題。不過請記住,如果你認為你的SNMP設備廠商沒有提供SNMP代理方面的詳細信 息,很可能是因為他們希望你購買他們的NMS網絡管理系統,或者購買能夠在另一個NMS平臺上使用的插件。

?

1.2. SNMP的三大版本



SNMP的常用版本有三個:SNMPv1、SNMPv2、SNMPv3
SNMP有三個不同的版本:SNMPv1(RFC 1155、RFC 1157、RFC 1212),SNMPv2c (RFC 1901、1908)以及 SNMPv3 (RFC 3411 - 3418). RFC 3584中詳細說明了這三種版本同時共存方面的信息。
SNMPv1是為基于公共管理的初始標準。SNMPv2是SNMPv1框架下衍生出來的,但是沒有定義信息,其后修訂為SNMPv2c,一個帶有于 SNMPv1類似信息格式的給予公共管理的版本。SNMPv2添加了幾個新的數據類型(Counter32、Counter64、Gauge32、 UInteger32、NsapAdress 以及BIT STRING),以及對OID表和OID值的設置的增強。SNMPv3是一個帶有新的信息格式、ACL、安全功能和遠處SNMP參數配置的、擴展了 SNMPv2框架的版本。
SNMP是基于幾個其他規范的,包括定義給予SNMP的數據類型的ASN.1 BER(Abstract Syntax Notation 1 Basic Encoding Rules), 以及詳細描述有SNMP MIB使用的語法的管理信息結構(SMI)。SMIv1目前被獨立出來,不應當再被使用。如果你選擇修改MIB的某些東西,你需要學習SMIv2和 ASN.1語法,不過其他情況下你只需要在興趣時看看他,而不必學習他。
現在,SNMPv1和SNMPv2被廣泛應用,但是由于這些協議的不安全特性,通常只使用只讀訪問。通常,除非你確實需要附加安全特性,否則你不需要過多地關注SNMPv3。

?

2. MIB和OID


?

2.1. OID



OID的編寫規則和習慣
SNMP OID是用一種按照層次化格式組織的、樹狀結構中的唯一地址來表示的,它與DNS層次相似。與其他格式的尋址方式類型,OID以兩種格式加以應用:全名和先對名(有時稱為“相關”)
完全驗證格式從root根開始,并且向外移到某個設備的獨立的質上。例如一個完整驗證的地址為:
該OID可用人們可讀的方式重寫為:
所有完全驗證OID都有 .iso.org.dod.internet.private 開始,數字表達為: .1.3.6.4. 。幾乎所有的OID都會跟上企業(.1)和由IANA(互聯網編號分配中心分配的)唯一的廠商標號。例如OID 789表示Network Appliance格式的廠商編號( NetApp )。廠商編號后面的是基于廠商實現的功能,并且各不相同。請注意,在iso.前面的 . ` ,與DNS中的后點相似,正確驗證的OID是有一個表示根的前綴 `. 開始的。
IANA網站上找到企業分配完整的清單 : http://www.iana.org/assignmenets/enterprise-numbers
OID的先對格式,從企業值開始,略過所有的隱含地址。因此,我們可以用 enterprises.netapp.netappl.raid.diskSUmmary.diskSpaceCount.0 來表示上述的OID,或者用數字格式 .1.789.6.4.8.0 .
寫OID的常用格式是用MIB名稱和在MIB中定義的唯一鍵值。例如,我們可以用簡寫的格式重寫上述OID: NETWORK-APPLIANCE-MIB::diskSpareCount.0 。 這種縮寫格式規則為::


MIB Name::唯一鍵值.instance.
某些唯一鍵值,可用多個實例表示,這樣所有的OID都以實例值結尾。這就是為什么你得注意到大多數OID都是以一個 .0 結尾的。



?

2.2. MIB



MIB介紹


MIB的內部結構剛開始時會讓人感覺有些奇怪和不好理解,不過它的結構非常好,你可以在不懂的情況下一個一個看進去。MIB的結構來源于IETF RFC1155和2578定義的管理信息結構。如果你想要修改或編寫自己的MIB,在動手前理解SMI非常有幫助。


為了更好地理解他們是怎樣工作的,我們先來看看MIB的頭:
-- PowerNet-MIB {iso org(3) dod(6) internet(1) private(4)
-- enterprises(1) apc(318) }


PowerNet-MIB DEFINITIONS ::= BEGIN


IMPORTS
?enterprises, IpAddress, Gauge, TimeTicks FROM RFC1155-SMI
?DisplayString FROM RFC1213-MIB
?OBJECT-TYPE FROM RFC-1212
?TRAP-TYPE FROM RFC-1215;


apc OBJECT IDENTIFIER ::= { enterprises 318 }
products OBJECT IDENTIFIER ::= { apc 1 }
apcmgmt OBJECT IDENTIFIER ::= { apc 2 }


可以用行開頭為 -- 的方法在MIB中加入注釋。在頭部用 BEGIN`聲明來開始MIB的定義。 `Imports 可用來從其他MIB中提取信息,通常用它來提取MIB-II規范要求的內容。


MIB放置從enterprise值開始的OID地址的結構。在此,enterprise值是318, 對應 "apc" (相對地址為 .1.318)。 通常之后會定義幾個類別。注意在花括號間定義的兩個值,其父地址后面跟一個它自己的地址。因此產品標識符有apc標識符表示,其父為enterprise 標識符,以此類推。類別和自類別的類型通常跟在MIB頭的后面,并且把有用的鍵值分割為子組。通過分段,各種值分別被列出,這樣可用的值更容易瀏覽。


MIB的真正好處在于對象類型的描述。以下是一個整形鍵值的例子:
upsBasicOutputStatus OBJECT-TYPE
SYNTAX INTEGER {
? unknown(1),
? onLine(2),
? onBattery(3),
? onSmartBoost(4),
? timedSleeping(5),
? softwareBypass(6),
? off(7),
? rebooting(8),
? switchedBypass(9),
? hardwareFailureBypass(10),
? sleepingUntilPowerReturn(11),
? onSmartTrim(12)
}
ACCESS read-only
STATUS mandatory
DESCRIPTION
? "The current state of the UPS. If the UPS is unable
? ?to determine the state of the UPS this variable is set
? ?to unknown(1)."
::= { upsBasicOutput 1 }


在此定義了一個具有整型返回值的upsBasicOutputStatus鍵值。返回的整型對應到列出的12個不同的數值中的一個。注意在MIB中,提供了該鍵值的描述。在確定那個對象能夠提供最好地你需要的數據時,特別有幫助,特別是當廠商沒有提供MIB文檔的情況下。


注意對象類型描述的最后一行包括有數值1,其父為數字為1的upsBasicOutput。如果我們按照這個父節點返推,我們會發現 upsBasicOutput的值為1,并且其父節點是值為4的upsOutput, upsOutput的父節點是值為1的ups,upsOutput的父節點是值為1的hardware, hardware的父節點是值為1的products,products的父節點是值為318的apc,apc的父節點的是值為1的 enterprise。因此,如果我們我們把所有的對應關系合起來,我們就得到 .1.319.1.1.1.4.1.1.0的upsBasicOutputStatus鍵值的相對地址。記住末尾的.0表示該鍵值的第一個實例。MIB瀏 覽器這樣的應用程序可以簡化MIB解析,它能夠比通過vim瀏覽文件的方式更加快捷地瀏覽,不過不要以為沒有這樣的工具就非常困難了。


因此,在這里真正需要注意的是,MIB其實只是提供給我們一張我們想從某個SNMP代理中獲得的可用OID的各種值的地圖。一個MIB描述了在哪里找某個 值、以及返回結果是什么。我們可以不用MIB與設備進行交互,只不過在理獲得'Up'的返回值,要比‘1’的返回值要簡單的多。通過利用Net-SNMP 命令行工具,你可以決定你希望返回結果的輸出樣式(這種方式下使用“Up"這樣的格式更好),或者你用腳本調用工具時(這種方式下使用”1“的格式就更 好)。
2.3. OID數據類型


SMI定義的OID返回值的數據類型。




SMI定義了一定數量的OID返回的數據類型。這些數據類型包括:
Integer
Signed 32bit Integer (values between -2147483648 and 2147483647). 有符號32位整數(值范圍: -2147483648 - +2147483648)
Integer32
Same as Integer. 與Integer相同。
UInteger32
Unsigned 32bit Integer (values between 0 and 4294967295). 無符號32位整數(值范圍:0-4294967295).
Octet String
Arbitrary binary or textual data, typically limited to 255 characters in length. 任意二進制或文本數據,通常長度限制在255個字符內。
Object Identifier
An OID. 一個OID。
Bit String
Represents an enumeration of named bits. This is an unsigned datatype. 表示取名的位的枚舉。這是一個無符號的數據類型。
IpAddress
An IP address. 一個IP地址。
Counter32
Represents a non-negative integer which monotonically increases until it reaches a maximum value of 32bits-1 (4294967295 dec), when it wraps around and starts increasing again from zero. 表示一個非負的整數(可遞增到32位最大值-1),然后恢復并從0開始遞增。
Counter64
Same as Counter32 but has a maximum value of 64bits-1. 與Counter32相同,最大值為64位的最大值-1。
Gauge32
Represents an unsigned integer, which may increase or decrease, but shall never exceed a maximum value. 表示無符號整數,可增加或減少,但是不超過最大值。
TimeTicks
Represents an unsigned integer which represents the time, modulo 2?32 (4294967296 dec), in hundredths of a second between two epochs. 表示代表數據的一個無符號整數,2^32取模(4294967296),兩個值之間為百分之一秒。
Opaque
Provided solely for backward-compatibility, its no longer used. 提供向下兼容,不再使用的數據類型
NsapAddress
Represents an OSI address as a variable-length OCTET STRING. 表示一個用變長八進制字符窗表示的OSI地址。
Net-SNMP tools will report the datatype when returning an OID unless you otherwise disregard it. As an example of that you’ll see:


Net-SNMP工具在返回一個OID時會包括其數據類型,除非你不想要他。以下是一個例子:
SNMPv2-MIB::sysContact.0 = STRING: Ben Rockwood
IF-MIB::ifPhysAddress.1 = STRING: 0:c0:b7:63:ca:4c
SNMPv2-MIB::sysUpTime.0 = Timeticks: (47372422) 5 days, 11:35:24.22
IF-MIB::ifAdminStatus.1 = INTEGER: up(1)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.318.1.3.7
RFC1213-MIB::atPhysAddress.1.1.10.10.1.1 = Hex-STRING: 00 50 73 28 47 A0
RFC1213-MIB::atNetAddress.1.1.10.10.1.1 = Network Address: 0A:0A:01:01
IF-MIB::ifSpeed.1 = Gauge32: 10000000
SNMPv2-MIB::snmpInPkts.0 = Counter32: 316
SNMPv2-MIB::snmpOutPkts.0 = Counter32: 314


這是一個相當典型的由Net-SNMP工具返回的數據類型表單。注意有些值已經由Net-SNMP自動解釋了,比如sysUpTime和 ifAdminStatus。這些值返回時使用到MIB,Net-SNMP會在MIBzhong找到返回值,并且為我們提供該值的文本表示。

?

2.4. MIB II



IETF RFC 1213 ”defines the second version of the Management Information Base (MIB-II) for use with network management protocols in TCP/IP-based internets.” All SNMP agent and tool distributions should include MIBs that will comply with MIB-II and all devices should at the very least return values that comply with the MIB-II standard.


Within the MIB-II standard several OID groups are defined, including:


The System Group
Basic system identification and information OIDs such as sysDescr, sysContact, sysName, SysLocation, etc. (Reported by Net-SNMP in SNMPv2-MIB)
The Interfaces Group
Network Interface information such as ifDescr, ifType,ifSpeed, ifAdminStatus, etc. (Reported by Net-SNMP in IF-MIB)
The Address Translation Group
Address Translation (AT) information mapping Physical to Logical addressing such as atNetAddress, atPhysAddress,etc. (Reported by Net-SNMP in RFC1213-MIB)
The IP Group
IP stats and settings such as ipInReceives, ipForwarding, ip-InAddrErrors, etc. (Reported by Net-SNMP in IP-MIB)
The ICMP Group
ICMP stats and settings such as icmpInMsgs, icmpIn-Errors, icmpInRedirects, etc. (Reported by Net-SNMP in IP-MIB)
The TCP Group
TCP stats and settings such as tcpActiveOpens, tcpPassiveOpens,tcpInErrs, etc. (Reported by Net-SNMP in TCP-MIB)
The UDP Group
UDP stats and settings such as udpInDatagrams, udpIn-Errors, etc. (Reported by Net-SNMP in UDP-MIB)
The EGP Group
EGP stats and settings (if the device support EGP) such as egpNeighAs, egpNeighMode, etc (Reported by Net-SNMP in RFC1213-MIB)
The Transmission Group
Device specific media transmition stats and settings(Reported by Net-SNMP in RFC1213-MIB or your vendor MIB)
The SNMP Group
SNMP stats and settings such as snmpInPkts, snmp-InASNParseErrs, snmpInTraps, etc. (Reported by Net-SNMP in SNMPv2-MIB)
If you do a default walk of an SNMP device the MIB-II data should be returned. All data with the exception of the EGP and Transmission groups are requirements of the standard. For most networking devices such as routers this information is usually sufficient to provide most of the information you could want.





?

2.5. 為Net-SNMP添加MIB



如何為Net-SNMP添加MIB信息


Additional MIBs can be added to your Net-SNMP installation by simply copying them into the $(PREFIX)/share/snmp/mibs directory. MIBs should be (re)named to follow the convention (MIB NAME).txt for clarity. You can find the MIBs proper name on the first uncommented line of the MIB (eg: Name- MIB DEFINITIONS ::= BEGIN).


For example, if you downloaded MIB for the JetDirect Management Card found on HP LaserJet printers it might have been named something like ”hpjetdirect. mib”. The header of the MIB looks like the following:


-- (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1997.
-- LaserJet 5Si Printer Model Specific MIB.
--
LaserJet5Si-MIB DEFINITIONS ::= BEGIN
This MIB should be renamed to ”LaserJet5Si-MIB.txt” and copied into the Net-SNMP mibs/ directory.


By following this convention it assures greater clarity when utilizing the various MIBs and a consistency with all other installed MIBs.

?

MIBs can be specified by a command line tool using the -m argument or the MIBS environmental variable for libsnmp applications including the PERL module. MIBs can be referenced locally by supplying a proper path (ie: - m ”./MY MIB.txt”) or globally by supplying the MIB name without the .txt suffix (ie: -m ”MY MIB”) if it’s located in the Net-SNMP MIBs directory.

?

總結

以上是生活随笔為你收集整理的SNMP介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。