본문 바로가기

Programing

SNMP - 래퍼 SNMP Management

SNMP Management API

링크시 Mgmtapi.lib 포함 필요

  1. #pragma comment(lib, "MgmtAPI.Lib")

WinSNMP API와 구별되는 API로 보임(StarUp과 CleanUp을 안해도 된다는 장점이 있음)

단순히 값만 조회 할 경우에는 이 API들을 사용하는 것이 좋아보임

  

Utility API를 이용해야 할 필요성이 있음

 

SnmpMgrOpen Function - 특정 SNMP에이전트에게 통신을 하기 위해, 교신용 소켓들과 데이터 구조들을 초기화하는 함수

SnmpMgrRequest Function - 특정 에이전트에게 명령을 요청하게 하는 함수

request 함수에서 세 번째 인자인 SnmpVarBindList 구조체의 포인트(SnmpVarBind 배열의 포인트를 가지는)는 반드시 SnmpUtilMemAlloc함수를 통해서 메모리 할당을 받아야 한다고 되어 있다.(왜??)

SnmpMgrStrToOid Function - 문자형태의 OID를 내부 형태의 OID로 변경

SnmpMgrClose Function - SnmpMgrOpen함수로 열었던 세션을 닫는 함수

DLL의 형태로 되어 있는 애플리케이션에서는 호출되면 안된다. (그냥 하지 말라는 건가? 아니면 자동으로 된다는 건가?)

 

SNMP Utility API

링크시 Snmpapi.lib 포함 필요

  1. #pragma comment(lib, "SnmpAPI.Lib")

SnmpUtilMemAlloc Function :

SnmpUtilMemReAlloc Function

SnmpUtilMemFree Function

 

SnmpUtilVarBindFree

SnmpUtilVarBindListFree Function

 

구조체

바인딩된 데이터를 담아오는 구조체이다.

값을 바로 가져오기가 힘들기 때문에 string이나 unsigned int 등으로 변환을 해 줄 필요가 있다.

  1. typedef struct {
        BYTE asnType;
        union {
            AsnInteger32            number;     // ASN_INTEGER
                                                // ASN_INTEGER32
            AsnUnsigned32           unsigned32; // ASN_UNSIGNED32
            AsnCounter64            counter64;  // ASN_COUNTER64
            AsnOctetString          string;     // ASN_OCTETSTRING
            AsnBits                 bits;       // ASN_BITS
            AsnObjectIdentifier     object;     // ASN_OBJECTIDENTIFIER
            AsnSequence             sequence;   // ASN_SEQUENCE
            AsnIPAddress            address;    // ASN_IPADDRESS
            AsnCounter32            counter;    // ASN_COUNTER32
            AsnGauge32              gauge;      // ASN_GAUGE32
            AsnTimeticks            ticks;      // ASN_TIMETICKS
            AsnOpaque               arbitrary;  // ASN_OPAQUE
        } asnValue;
    AsnAny;
  2. typedef struct {
        BYTE * stream;
        UINT   length;
        BOOL   dynamic;
    AsnOctetString;
  3. typedef struct {
        struct {
            DWORD LowPart;
            DWORD HighPart;
        } ULARGE_INTEGER;
  4. typedef struct {
        UINT   idLength;
        UINT * ids;
    AsnObjectIdentifier;

나는 변환을 해주는 함수를 만들어서 사용을 하는데,

몇가지 흐름이 있는데 asnType을 타라 분기하면 편하다.

long

ASN_INTEGER (=ASN_INTEGER32) -> AsnInteger32 -> LONG -> long

AsnOctetString (구조체)

ASN_OCTETSTRING -> AsnOctetString

ASN_OPAQUE ->  AsnOpaque -> AsnOctetString

ASN_BITS ->  AsnBits -> AsnOctetString

ASN_SEQUENCE ->  AsnSequence -> AsnOctetString

ASN_IPADDRESS ->  AsnIPAddress -> AsnOctetString

ULARGE_INTEGER (구조체)

ASN_COUNTER64 -> AsnCounter64 -> ULARGE_INTEGER

unsigned long

ASN_UNSIGNED32 ->  AsnUnsigned32 -> ULONG -> unsigned long

ASN_COUNTER32 -> AsnCounter32 -> AsnUnsigned32 -> ULONG -> unsigned long

ASN_GAUGE32 ->  AsnGauge32 -> AsnUnsigned32-> ULONG -> unsigned long

ASN_TIMETICKS -> AsnTimeticks -> AsnUnsigned32 -> ULONG -> unsigned long   // 예는 한번 변환해서 숫자형태로..

 

AsnObjectIdentifier (구조체)

ASN_OBJECTIDENTIFIER ->  AsnObjectIdentifier

 

프로그램 샘플

(0116)GetModelbyIP.zip

1001_MIB.zip -> 1005_MIB.zip

테스트 데이터 입력 : push_back

데이터 삭제 : clear_all / pop_front or pop_back
데이터 조회 : getValueByString(oid) / getValueByStringAt(index=0)
       getValueByOctet(oid)  / getValueByOctetAt(index=0)
       getValueByLong(oid)
       getValueByULong(oid)

[IPAddr]
1416 86 4
1428 88 5 1662
1428 89 5 20000~

[TimeTicks]
1392 79 3 30
1400 79 3 50
1416 85 4 180
1428 88 5 3772 - 1464657

[octet]
1400 80 3 47
1416 86 4 1200
1428 88 5 4377
1428 87 5 119533
1428 89 5 120868 - 128608

10.15.102.5 another net
[multiple1]
1388 79 3 7
1396 79 3 339
1396 81 3 13702 - 56744

[multiple2]
1396 79 3 284
1396 81 3 3650 - 275502
1396 82 3 969079 - 2730000
1396 83 3 3010000 - 3333333 (종료)

[walk]
2280 83 3 1
2296 85 3 1
2300 85 3 2-16
2300 86 3 36-133

1384 79 3 1
1392 81 3 2-3
1392 82 3 26
1392 83 3 455-1357

Network.zip : value 리졸브 용


'Programing' 카테고리의 다른 글

Socket (소켓) 프로그래밍  (0) 2012.09.21
SNMP - 래퍼 net-snmp  (0) 2012.09.21
SNMP - 래퍼 Rogério Paulo  (0) 2012.09.21
SNMP 래퍼 클래스  (0) 2012.09.21
SNMP 프로그래밍  (0) 2012.09.21