[net-snmp 질문 #5] 안녕하세요.. net-snmp 간단한 소스인데 mib
글쓴이: facered79 / 작성시간: 금, 2005/04/15 - 9:18오전
먼저 제 글을 읽어주셔서 감사합니다.!
전 redhat 8.0 에서 net-snmp-5.2.1 을 가지고
작업중에 있습니다. 지금은 간단한 소스를 이용해 밉정보를 가져
오는 튜토리얼을 하고 있는데요.. mib의 위치를 알지 못하는 이유
로 mib 정보를 가져 오지 못하는것 같습니다..
아래 제 snmpd.conf 내용과 소스 내용, 에러 메시지 를 올리도록
하겠습니다.
음.. 이유를 모르겠네요 .. 왜 안되는건지..
글이 길어 조금 불편하시겠지만 .. 그래도 조은 조언 주셨으면
감사하겠습니다.. 그럼.
<snmpd.conf 설정> com2sec local localhost public com2sec mynetwork IP.IP.IP.IP/* public group MyRWGroup v1 local group MyRWGroup v2c local group MyRWGroup usm local group MyROGroup v1 mynetwork group MyROGroup v2c mynetwork group MyROGroup usm mynetwork view all included .1 80 access MyROGroup "" any noauth exact all none none access MyRWGroup "" any noauth exact all all none syslocation facered@summitec.co.kr syscontact TBI
< 소스 내용 > int main(int argc, char ** argv) { struct snmp_session session; struct snmp_session *sess_handle; struct snmp_pdu *pdu; struct snmp_pdu *response; struct variable_list *vars; oid id_oid[MAX_OID_LEN]; oid serial_oid[MAX_OID_LEN]; size_t id_len = MAX_OID_LEN; size_t serial_len = MAX_OID_LEN; int status; struct tree * mib_tree; /*********************/ if(argv[1] == NULL){ printf("Please supply a hostname\n"); exit(1); } init_snmp("APC Check"); snmp_sess_init( &session ); session.version = SNMP_VERSION_1; session.community = "public"; session.community_len = strlen(session.community); session.peername = argv[1]; sess_handle = snmp_open(&session); add_mibdir("/usr/local/share/snmp/mibs/"); mib_tree = read_mib("RFC1213-MIB.txt"); pdu = snmp_pdu_create(SNMP_MSG_GET); read_objid("RFC1213-MIB::sysUpTime.0", id_oid, &id_len); snmp_add_null_var(pdu, id_oid, id_len); status = snmp_synch_response(sess_handle, pdu, &response); ...
< 에러 내용 > root@localhost Snmpproject]# ./net-snmp1 localhost RFC1213-MIB.txt: No such file or directory Cannot find module (SNMPv2-SMI): At line 0 in (none) Segmentation fault (core dumped) [root@localhost Snmpproject]#
Forums:
에러메시지로 보아 /usr/local/share/snmp/mibs/RFC
에러메시지로 보아 /usr/local/share/snmp/mibs/RFC1213-MIB.txt
파일을 읽는 과정에서 문제가 생긴것으로 보입니다만.
우선 해당 디렉토리에 RFC1213-MIB.txt 파일에 있는지 확인하시고,
그 파일이 net-snmp에서 사용하는 MIB 정의 포맷이 맞는지 살펴보시기
바랍니다.
제품마다 다르기는 합니다만, 경우에 따라서는 지정된 형태로 변환된 MIB 정의
파일을 사용해야만 하는 경우도 있습니다. net-snmp는 사용해보지 않아서
정확히 어떤 포맷의 MIB 정의 파일을 사용하는지 모르겠군요.
파일에서 RFC1213-MIB의 sysUpTime OID 값을 제대로 읽어왔다면
id_oid의 값은 1.3.6.1.2.1.1.3.0 이 되어야합니다. read_objid() 직후에
값을 찍어서 확인해보시면 되겠네요.
답변 감사합니다. ^^
말씀해주신데로 oid 값을 찍기 위해
라고 추가를 했는데요.. 아무래도 자료형으로 저걸 쓰면 안되는것 같습니다.
oid를 출력하기 위한 자료형으로는 어떤것이 있나요..
아 ! 찾아 냈습니다.. 배열로 풀어서 보면 되는군요.
배열로 풀어서 봤더니 제가 요구하는
oid가 얻어지는 것을 확인 했습니다..
하지만.. 그 아래 부분에서
다시 에러가 발생하네요..
timeout 에러는 아니고..
snmp_error 상수 1을 반환하면서 종료 되는데..
이거는 왜 그런 건가요..
어느 부분에서 에러가 발생하는지부터를 정확히 확인해야하지 않을까요?
어느 부분에서 에러가 발생하는지부터를 정확히 확인해야하지 않을까요?
Get-Request 메시지를 보내는 과정에서 에러가 나는지, Get Response
메시지를 읽는 과정에서 에러가 나는지...
SNMP를 UDP를 사용하기 때문에 OID 값만 정확하다면 메시지 전송과정에서
에러가 발생할 가능성은 크지 않을겁니다만, 그래도 확인은 해봐야겠죠.
일단 어디에서 error가 리턴되는지를 파악해야 조치가 가능할것 같습니다.
흠..
확인해본 결과
정확한 위치는
snmp_synch_response 함수에서
에러가 리턴되고 프로그램이 종료되는 것을 확인 할 수 있었습니다..
지금 저 함수 몸체를 좀 고쳐서 왜 그러는지 확인중에 있습니다..
댓글 달기