1、Target
Target,表示被管理的設備。對於一個被管理的設備,我們關注它的Address,它使用的協議版本version,訪問它的用戶名和密碼,以及對這個設備我們設置跟它打交道的一些策略,比如超時時間、重傳次數等。所以有如下方法:
1)獲取或者設置IP地址
Address getAddress()
void setAddress(Address address)
2)獲取或者設置版本號(支持V1,V2c,V3)
int getVersion()
void setVersion(int ver)
3)獲取或者設置超時時間
long getTimeout()
void setTimeout(long out)
4)獲取或者設置重傳次數
int getRetries()
void setRetries(int retries)
5)獲取或者設置最大PDU大小值
int getMaxSizeRequestPDU()
void setMaxSizeRequestPDU(int max)
上面這些對於SNMP三個版本都是相同的,不同的是在於安全方面。具體來說,SNMPv1和SNMPv2c採用共同體(Community)方式,安全性很差;SNMPv3採用基於用戶的安全(USM)方式,安全性能得到很大提高。
(1)對於SNMPv1和SNMPv2c,使用Target派生出一個子類CommunityTarget,增加了對Community的方法:
OctetString getCommunity() void setCommunity(OctetString community)
(2)對於SNMPv3,使用其子類UserTarget,增加了一些有關USM安全方面的設置,比如採用的安全模型、安全級別、訪問該設備的用戶名以及權威引擎ID(authoritative engine ID):
i)安全級別(支持三種安全級別)
int getSecurityLevel()
void setSecurityLevel(int level)
ii)訪問用戶名(該訪問用戶名稱必須在設置USM的時候添加其相應的UsmUser)
OctetString getSecurityName()
void setSecurityName(OctetString name)
iii)安全模型(支持三種安全模型)
int getSecurityModel()
void setSecurityModel(int model)
v)權威引擎ID(authoritative engine ID)
byte[] getAuthoritativeEngineID()
void setAuthoritativeEngineID(byte[] id)
對於Target的代碼大致如下:
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
target.setVersion(SnmpConstants.version1)
UserTarget target = new UserTarget();
target.setAddress(targetAddress);
target.setRetries(1);
// set timeout to 500 milliseconds -> 2*500ms = 1s total timeout
target.setTimeout(500);
target.setVersion(SnmpConstants.version3);
target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
target.setSecurityName(new OctetString("MD5DES"));