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 클라이언트 애플리케이션은 다음 단계를 수행해야 한다.

  1. 정보를 가져올 SNMP 객체의 OID를 설정하고, PDU 타입을 설정한다.

  2. SNMP 정보를 가져올 Target의 주소 및 포트 번호를 설정하고, SNMP 버전을 설정한다(JEUS SNMP는 UDP를 사용하기 때문에 UDPAddress를 사용).

  3. SNMP 메시지 객체를 생성해서 전송할 메시지를 생성한다.

  4. 메시지 전송 및 응답을 수신한다.

예제

다음은 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 문서를 참고한다.