2012-09-18 6 views
2

net-snmp과 함께 다양한 MIBS 목록을 표시하고 SNMP 트리 구조와 관련된 다른 정보를 표시하려고합니다.C/C++에서 net-snmp MIB API를 사용하여 SMIv1 MIBS를 나열하는 방법은 무엇입니까?

이제 내 고객의 SMIv1 MIBS가 목록에 표시되지 않지만 net-snmp에 의해 올바르게로드 된 것으로 나타났습니다.

샘플 net-snmp 코드는 메모리의 MIB 구조를 통과하며 트리의 MIB와 MODULE-IDENTITY 메모 사이에 SMIv2 양립성이 있다고 가정합니다. 따라서 MODULE-IDENTITY 노드를 발견하면 MIB를 찾습니다.

누구도 정확한 방법이 무엇인지 알고 있습니까 net-snmp으로 SMIv1 MIBS를 나열 하시겠습니까? (? 또는 해결 방법)

// Read mibs and obtain memory structures 
    struct tree * head = read_all_mibs(); 
    // Walk down the SNMP tree 
    for (struct tree * tp = head; tp; tp = tp->next_peer) 
    { 
    // Module-indentity 
    if (tp->type == TYPE_MODID) 
    { 
     // XXX We found a SMIv2 MIB, but SMIv1 MIBs have no MODULE-IDENTITY node 
    } 
    } 

NB : 나는 smidump (명령 행 도구 또는 http://www.ibr.cs.tu-bs.de/projects/libsmi/tools/에서 웹 서비스로) 변환기를 발견하지만 MIB에 대한 MODULE-IDENTITY 노드를 추가하지 않습니다 .

편집 : 이전 SNMP MIB를 최신 SNMP MIB (SMIv2 스타일)로 변환하는 도구는 문제를 해결할 수 있습니다. 그 특정한 방향의 어떤 도움?

한 가지 제안은 MIB (이 작동하지 않을 수 있도록 때로는 MIB는 많은 다른과 관련이없는 장소에서 노드를 추가합니다)의 루트 객체 식별자를 찾기 위해, 모듈 식별자의 부재에, 수 있습니다. 루트 노드를 사용하면 해당 MIB와 관련된 대부분의 트리를 표시 할 수 있습니다.

답변

0

동료와 내가 문제를 해결하기 위해 찾은 유일한 해결책은 "최상위"MIB를 SNMPv2와 유사한 구조로 변환하는 것이 었습니다. 즉, 1) MODULE-IDENTITY 유형을 가져오고, 2) 최상위 노드를 MODULE-IDENTITY 선언으로 바꿉니다.

이 수정
... 
    IMPORTS 
     MODULE-IDENTITY 
     FROM 
     SNMPv2-SMI 
    ... 

    -- Removed top-level node 
    -- compaq    OBJECT IDENTIFIER ::= { enterprises 232 } 

    -- Add a fake module-identity node 
    compaq MODULE-IDENTITY 
    LAST-UPDATED "200111120000Z" 
    ORGANIZATION "COMPAQ" 
    CONTACT-INFO 
      "[email protected]" 
    DESCRIPTION 
      "why does compaq still provide these mibs in 2013?" 
    REVISION  "9407210000Z" 
    DESCRIPTION 
      "Normal fixed MIB module." 
    ::= { enterprises 232 } 

net-snmp 라이브러리는 .. 단지 다른 모든은 SNMPv2 MIB를와 마찬가지로, 우리의 MIB에 대한 우리에게 코멘트

0

UDP 데이터 그램을 사용합니다. net-snmp 또는 snif UDP 트래픽 소스를 얻을 수 있습니다 (더 쉬운 방법처럼 보임).

+0

감사 모듈 정체성 노드를 보여줍니다하지만이 역시 오프 주제 . 실제로 C/C++에서 net-snmp API를 사용하여 MIB를로드하고 있습니다. –

0

net-snmp는 snmp를 실행하는 에이전트 (예 : 서버)입니다. 어떤 클라이언트 (예 : mib 브라우저 또는 snmp-get/walk와 같은 명령 줄 도구)를 사용하여 쿼리하고 있습니까? 클라이언트에도 서버와 동일한 MIB가로드되어 있습니까?

나는 당신이 SNMPv1을 사용하고 있다고 가정합니다. 올바른 액세스 커뮤니티를 사용하고 있습니까? 즉, 클라이언트 (MIB 브라우저 또는 명령 줄 snmp 클라이언트)에서 SNMP 에이전트/서버로 인증 할 올바른 비밀번호를 입력하고 있습니까?

문제를 찾기 위해 GUI 기반 클라이언트 (SNMP 관리자라고 함)를 사용하는 것이 좋습니다. 예 : MGSOftMIBBrowser

평가판은 무료입니다. 그리고 실패한 암호 (snmpv1의 커뮤니티 이름)와 같은 시도의 결과를 볼 수 있습니다. 여러 가지 다른 가능한 문제 중

가 될 수있다 :

SMIv1 오래된 형식입니다. 따라서 사용중인 net-snmp의 버전을 지원해야합니다.

SNMPv2를 사용하는 경우 올바른 커뮤니티를 사용하여 인증 할 수 있습니다. 그러나 커뮤니티에 표시하려는 mib에 대한 읽기 액세스 권한이 없습니다. SNMPv2는 oid 트리의 특정 서브 세트가 특정 커뮤니티 (사용자)에게 표시되도록 허용하는보기 개념을 도입했습니다.

비표준 mib 인 경우 (예 :core snmp mibs의 일부가 아님), 완전한 OID (1.3.4.1.2 ...와 같은 것)가 있어야하며, GUI (MIB 브라우저)가있는 경우 먼저 체크인하거나 그렇지 않으면 특정 oid에 대한 요청을 디버깅해야합니다.

비표준 mib은 클라이언트와 클라이언트 모두에서로드해야 함을 이해해야합니다. 그렇지 않으면 클라이언트는 요청을 쿼리 할 수있는 MIB의 세부 사항을 알 수 없습니다.

+0

주석 주셔서 감사합니다 (하지만 이것은 주제와 다름입니다). 해당 MIB 브라우저를 사용해 보겠습니다 (문제를 찾을 수는 없지만 MIB가 SMIv1 형식이라는 사실 - 병 인의로 말하면 어떻게 처리하는지보십시오). –

+0

프로 그램을 프로 그래밍하는 경우에도 프로그램에 mib를로드 했습니까? 이전에로드되지 않았 으면 코드가 걷지 않습니다. 즉, 프로그램에 코어 MIB의 일부가 아닌 MIB를로드하려면 먼저 oid 정보가 필요합니다. – fayyazkl

+0

또는 환경 설정 또는 read_all_mibs()를 사용하여 MIB를로드 할 수 있습니다. –