SNMP Management API
링크시 Mgmtapi.lib 포함 필요
- #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 포함 필요
- #pragma comment(lib, "SnmpAPI.Lib")
SnmpUtilMemAlloc Function :
SnmpUtilMemReAlloc Function
SnmpUtilMemFree Function
SnmpUtilVarBindFree
SnmpUtilVarBindListFree Function
구조체
바인딩된 데이터를 담아오는 구조체이다.
값을 바로 가져오기가 힘들기 때문에 string이나 unsigned int 등으로 변환을 해 줄 필요가 있다.
- 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; - typedef struct {
BYTE * stream;
UINT length;
BOOL dynamic;
} AsnOctetString; - typedef struct {
struct {
DWORD LowPart;
DWORD HighPart;
} ULARGE_INTEGER; - 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
프로그램 샘플
테스트 데이터 입력 : 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 |