본 장에서는 JEUS SNMP Manager 애플리케이션의 개발 및 설정 방법에 대해서 설명한다.
SNMP(SNMPv1, SNMPv2, SNMPv3) 표준을 준수하는 SNMP Manager들은 JEUS SNMP와 함께 동작할 수 있다.
SNMP에 대한 자세한 설명은 SNMP Management Framework 관련 스펙을 참조한다(Jakarta management 1.1 스펙 참조).
애플리케이션은 필요에 따라 다양한 형태를 가지지만, 본 절에서는 SNMP4J API를 사용한 클라이언트 프로그램을 설명한다.
SNMP4J는 오픈 소스이며, J2SE 1.4 및 이후 버전에 맞는 SNMP 구현체를 제공하고 있다. SNMP4J API를 이용한 SNMP 클라이언트 애플리케이션은 다음 단계를 수행해야 한다.
정보를 가져올 SNMP 객체의 OID를 설정하고, PDU 타입을 설정한다.
SNMP 정보를 가져올 Target의 주소 및 포트 번호를 설정하고, SNMP 버전을 설정한다(JEUS SNMP는 UDP를 사용하기 때문에 UDPAddress를 사용).
SNMP 메시지 객체를 생성해서 전송할 메시지를 생성한다.
메시지 전송 및 응답을 수신한다.
다음은 SNMP4J API를 이용한 SNMP 클라이언트 애플리케이션 프로그램의 예제이다.
[예 4.1] 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 문서를 참고한다.