Languages/Java2011.07.12 18:45
SNMP4J: Cannot Handle InetAddress null response

SNMP4J를 사용해서 SNMP Response를 처리하다 보면, 분명히 있는 테이블의 있는 컬럼인데 그 값을 제대로 읽어오지 못하고 timeout이 나버리는 경우가 있습니다. 가령 다음 그림을 보시면...

SNMP4J library does not handle null values for InetAddress columns or scalar values. Therefore, if you do GET or GETNEXT or GETBULK for the fields, your request will be timed out. But most of the MIB browsers do not. They handle the case without error.


MIB 브라우저로 보면 InetAddress 타입의 Table Column 값이 없을 경우 null 응답을 받아서 잘 보여주고 있는 점을 보실 수 있습니다. 그런데 SNMP4J 라이브러리는 InetAddress 타입 컬럼의 값이 null인 경우를 제대로 처리하지 못합니다. 즉, InetAddress 타입 컬럼의 값이 null로 채워진 응답을 받으면, 그냥 무시해버립니다. 그러다보니 SNMP Agent에서는 응답을 보냈어도 클라이언트 쪽에서는 Timeout 나 버리는 경우가 발생하죠.

Above picture shows that MIB browsers correctly handle null-value for InetAddress fields. But, as I already tolds you, SNMP4j does not.



이 문제를 교정하려면 org.snmp4j.smi.IpAddress 클래스를 다음과 같이 수정해야 합니다.

To remedy this problem, you should fix org.snmp4j.smi.IpAddress class as follows.


이렇게 수정하고 실행해보면 이제 SNMP Agent가 InetAddress 타입 column의 값을 null로 보내도 오류 없이 처리하는 것을 보실 수 있습니다. SNMP4J는 소스코드와 함께 Maven 프로젝트 형식으로 배포되기 때문에, 간단히 재컴파일해서 쓰실 수 있습니다.

As SNMP4J is distributed as a Maven project with source codes, you can easily recompile and detour the timeout problems. :-)


신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 좋은 정보 감사합니다..ㅎㅎ 이 부분은 시행착오를 격지 않을듯..

    2013.12.11 17:20 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 그러시다니 다행입니다. :-)

    2013.12.11 17:21 신고 [ ADDR : EDIT/ DEL : REPLY ]