SNMP4J | SNMP v2 Client Sample Code
회사에서 급히 SNMP v2 프로토콜로 장비를 제어할 일이 있어서, 간단한 샘플코드를 만들어 보았습니다. 당장 타겟 장비에 물려볼 수가 없는 환경이라 작성한 샘플 코드를 테스트를 할 수가 없었습니다. 우연히 회사 내부망에서 와이어샤크로 네트워크를 모니터링해보니 이름 모를 장비(?)와 제 컴퓨터가 SNMP 프로토콜로 통신하는 패킷이 보였습니다. 그래서 해당 장비(SNMP Agnet)에 아무 메시지나 전송하고 정의되지 않은 항목이라는 응답을 받아 보는 것으로 테스트를 진행했습니다.
Dependency
먼저 Maven Dependency 를 아래와 같이 추가합니다.
<dependency>
<groupId>org.snmp4j</groupId>
<artifactId>snmp4j</artifactId>
<version>3.6.4</version>
</dependency>
Sample Code
샘플 코드는 간단히 다음과 같이 동작합니다.
- 전송 계층으로는 UDP 를 사용합니다. (실제로 TCP 도 사용가능한 것 같습니다)
- 포트는 기본 포트 161번 포트를 사용합니다.
- SNMP 버전은 v2c 를 사용합니다.
- ID ("1.3.6.1.4.1.47891.1") 에 대한 값을 Agent 에 요청한 후 수신한 응답을 출력합니다.
@Test
void snmpPrototype() throws IOException, ExecutionException, InterruptedException {
SnmpBuilder snmpBuilder = new SnmpBuilder();
Snmp snmp = snmpBuilder.udp().v2c().threads(2).build();
Address targetAddress = GenericAddress.parse("udp:192.168.0.202/161");
Target<Address> target = new CommunityTarget<>();
target.setSecurityName(new OctetString("public"));
target.setTimeout(500);
target.setRetries(1);
target.setAddress(targetAddress);
target.setVersion(TargetBuilder.SnmpVersion.v2c.getVersion());
List<VariableBinding> list = new ArrayList<>();
// OID = Object Name, Variable = Object Value
list.add(new VariableBinding(new OID("1.3.6.1.4.1.47891.1")));
PDU pdu = new PDU();
pdu.setType(PDU.GET);
pdu.setRequestID(new Integer32(1));
pdu.setVariableBindings(list);
SnmpCompletableFuture snmpRequestFuture = SnmpCompletableFuture.send(snmp, target, pdu);
List<VariableBinding> vbs = snmpRequestFuture.get().getAll();
System.out.println("Received: " + snmpRequestFuture.getResponseEvent().getResponse());
System.out.println("Payload: " + vbs);
}
Output
콘솔 출력 결과는 다음과 같습니다.
Received: RESPONSE[requestID=1, errorStatus=Success(0), errorIndex=0, VBS[1.3.6.1.4.1.47891.1 = noSuchObject]]
Payload: [1.3.6.1.4.1.47891.1 = noSuchObject]
Packet Capture
SNMP 패킷 구조에 대한 설명은 아래 사이트에 제일 잘 나오는 것 같습니다.
샘플 코드 실행 시 와이어샤크로 캡처한 패킷은 다음과 같습니다.
-
전체 패킷 목록
-
첫번째 요청 패킷에 대한 상세
-
두번째 응답 패킷에 대한 상세
Reference
- https://www.snmp4j.org/
- https://agentpp.com/doc/snmp4j/index.html?overview-summary.html
- https://technet.tmaxsoft.com/upload/download/online/jeus/pver-20160610-000001/snmp/chapter_JEUS_SNMP_Programming.html#sect_Simple_SNMP_Client_Programming
Author And Source
이 문제에 관하여(SNMP4J | SNMP v2 Client Sample Code), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@joosing/SNMP4J-SNMP-v2-Client-Sample-Code
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여(SNMP4J | SNMP v2 Client Sample Code), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@joosing/SNMP4J-SNMP-v2-Client-Sample-Code저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)