2010年07月26日
実践SNMP+Java - SNMP Set
SNMP4Jを利用したSNMP Setについて説明します。
その名の通りSetを使うとSNMPを使ってエージェントの値を設定する事が出来ます。
では、Javaコードから見ていきましょう。
<Javaコード>
- // SNMP parameters.
- CommunityTarget comTgt = new CommunityTarget();
- String managerUdpAddr = "localhost/161"; // SNMP agent UDP address.
- comTgt.setAddress( new UdpAddress(managerUdpAddr) );
- comTgt.setCommunity( new OctetString("readwrite") ); // SNMP write community.
- comTgt.setVersion(SnmpConstants.version1); // SNMP version.
- final String sysLocationOID = ".1.3.6.1.2.1.1.6.0"; // system.sysLocation.0
- String sysLocationValue = "my locaction";
- // create set PDU
- PDU pdu = new PDU();
- // set PDU type
- pdu.setType(PDU.SET);
- // create OID
- OID oid = new OID(sysLocationOID);
- /*
- * All Known Implementing Classes(from javadoc):
- * AbstractVariable, BitString, Counter32, Counter64, Gauge32,
- * GenericAddress, Integer32, IpAddress, Null, OctetString, OID,
- * Opaque, SMIAddress, TcpAddress, TimeTicks, TransportIpAddress,
- * UdpAddress, UnsignedInteger32, VariantVariable
- */
- Variable variable = new OctetString( sysLocationValue );
- // create variable binding (varbind)
- VariableBinding varbind = new VariableBinding(oid, variable);
- // add varbind
- pdu.add(varbind);
- // SNMP operation object
- Snmp snmp = null;
- // DefaultUdpTransportMapping or DefaultTcpTransportMapping
- DefaultUdpTransportMapping utm = null;
- try {
- utm = new DefaultUdpTransportMapping();
- snmp = new Snmp(utm);
- snmp.listen(); // must 'snmp.listen()' to receive response.
- // set
- ResponseEvent event = snmp.set(pdu, comTgt);
- PDU resPDU = event.getResponse();
- if ( resPDU != null && resPDU.getErrorStatus() == SnmpConstants.SNMP_ERROR_SUCCESS ) {
- System.out.println("succeed: SNMP Set");
- } else {
- if ( resPDU != null ) {
- // SNMP error
- System.out.println("failed: " + resPDU.getErrorStatusText());
- } else {
- System.out.println("failed: timeout.");
- }
- }
- snmp.close(); // closes the session and frees any allocated resources.
- } catch (IOException e) {
- e.printStackTrace();
- }
<実行結果>
succeed: SNMP Set
この結果だけでは間違いなくエージェント側の値が書き換わったかわかりませんね。
SNMP Getで説明したコードでOIDをsystem.sysLocation.0を取得して下さい。
成功している場合、Setリクエストした値が表示されます。
1.3.6.1.2.1.1.6.0 -> my locaction
<説明>
1)送信準備
1~6行目でSNMPパラメータの設定を行っています。
この時、Write権限のコミュニティ名を設定します。
SNMPエージェントがWindows PCならばSNMP Service/プロパティ/セキュリティで
設定出来ますよ。
2)PDUの生成
9~26行目でPDUを生成しています。
今回は".1.3.6.1.2.1.1.6.0"; // system.sysLocation.0の値をSetします。
ちなみに、RFC1213-MIBをみると、sysLocationは次のように定義されており、
sysLocation OBJECT-TYPESYNTAX DisplayString (SIZE (0..255))ACCESS read-writeSTATUS mandatoryDESCRIPTION "The physical location of this node (e.g.,`telephone closet, 3rd floor')."
そのACCESS属性から書き込み(Set)可能である事が確認出来ます。
また、SyntaxはOctetStringの拡張であるDisplayStringですから、22行目で
Variableインタフェースの実装クラスであるOctetStringを使ってVariableを
生成しています。
このOIDとVariableをPDUに追加してSet PDUの準備は完了です。
3)送信と応答確認
34~46行目でSetリクエストの送信と応答を確認しています。
snmp.set(pdu, comTgt);の戻り値からレスポンスPDUを取り出して、
nullでは無く、かつ、SNMPエラー・ステータスが成功(0)であれば、
Setは完了です。
Setは完了です。
これ以外の場合は、タイムアウト又はSNMPエラー(OID間違いなど)が
発生しているので詳しい内容を確認して下さい。
発生しているので詳しい内容を確認して下さい。
#コミュニティ名の間違いはタイムアウトになります。
ダグラス・R. マウロ ケビン・J. シュミット
オライリー・ジャパン
売り上げランキング: 257,278
オライリー・ジャパン
売り上げランキング: 257,278
Java ネットワーク プログラミング 基礎からわかる 完全入門
posted with amazlet at 13.01.12
永嶋 浩
技術評論社
売り上げランキング: 228,941
技術評論社
売り上げランキング: 228,941
Posted by netbuffalo at 20:06│TrackBack(0)│
│実践SNMP+Java