SNMP Manager 애플리케이션
본 장에서는 JEUS SNMP Manager 애플리케이션의 개발 및 설정 방법에 대해서 설명한다.
1. 개요
SNMP(SNMPv1, SNMPv2, SNMPv3) 표준을 준수하는 SNMP Manager들은 JEUS SNMP와 함께 동작할 수 있다.
SNMP에 대한 자세한 설명은 SNMP Management Framework 관련 스펙을 참조한다(Jakarta management 1.1 스펙 참조). |
2. 간단한 SNMP 클라이언트 프로그램
애플리케이션은 필요에 따라 다양한 형태를 가지지만, 본 절에서는 SNMP4J API를 사용한 클라이언트 프로그램을 설명한다.
SNMP4J는 오픈 소스이며, J2SE 1.4 및 이후 버전에 맞는 SNMP 구현체를 제공하고 있다. SNMP4J API를 이용한 SNMP 클라이언트 애플리케이션은 다음 단계를 수행해야 한다.
-
정보를 가져올 SNMP 객체의 OID를 설정하고, PDU 타입을 설정한다.
-
SNMP 정보를 가져올 Target의 주소 및 포트 번호를 설정하고, SNMP 버전을 설정한다(JEUS SNMP는 UDP를 사용하기 때문에 UDPAddress를 사용).
-
SNMP 메시지 객체를 생성해서 전송할 메시지를 생성한다.
-
메시지 전송 및 응답을 수신한다.
예제
다음은 SNMP4J API를 이용한 SNMP 클라이언트 애플리케이션 프로그램의 예제이다.
SNMP 클라이언트 애플리케이션 : <SnmpclientSample.java>
import java.net.*;
import java.util.*;
import org.snmp4j.*;
import org.snmp4j.PDU;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.transport.*;
import org.snmp4j.smi.*;
public class SnmpclientSample{
static int defaultPort = 9999;
static String defaultIP = "127.0.0.1";
static String defaultOID = "1.3.6.1.4.1.14586.100.2.1";
static void testGetNext(String oid) throws java.io.IOException {
//1. Make Protocol Data Unit
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(defaultOID)));
pdu.setType(PDU.GETNEXT);
//2. Make target
CommunityTarget target = new CommunityTarget();
UdpAddress targetAddress = new UdpAddress();
targetAddress.setInetAddress(InetAddress.getByName(defaultIP));
targetAddress.setPort(defaultPort);
target.setAddress(targetAddress);
target.setCommunity(new OctetString("public"));
target.setVersion(SnmpConstants.version1);
//3. Make SNMP Message. Simple!
Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
//4. Send Message and Recieve Response
snmp.listen();
ResponseEvent response = snmp.send(pdu, target);
if (response.getResponse() == null) {
System.out.println("Error: There is some problems.");
} else {
Vector variableBindings = response.getResponse().getVariableBindings();
for( int i = 0; i < variableBindings.size(); i++){
System.out.println(variableBindings.get(i));
}
}
snmp.close();
}
public static void main(String[] args) throws java.io.IOException {
// get the SNMP port number
if (args.length > 0) {
defaultPort = Integer.parseInt (args[0]);
}
System.out.println ("PORT : " + defaultPort);
// get the ip address of the machine that the SNMP agent runs on
if (args.length > 1) {
defaultIP = args[1];
}
System.out.println ("IP : " + defaultIP);
// get the OID number that you want to get the value of
if (args.length > 2) {
defaultOID = args[2];
}
System.out.println ("OID : " + defaultOID);
try {
testGetNext(defaultOID);
} catch (Exception ex) {
System.out.println ("ex *** : " + ex);
ex.printStackTrace ();
}
}
}
SNMP4J API는 http://www.snmp4j.org에서 제공한다. SNMP4J API에 대한 자세한 내용은 SNMP4J 문서를 참고한다. |