대단히 감사합니다.
빌더(TWx) 님이 쓰신 글 :
: 하안인 님이 쓰신 글 :
: : 빌더 6에서 인디의 snmp를 사용하여 네트워 장비를 컨트롤 하는 프로그램을 작성하려고 하는데요
: : snmp는 agent 와 manager가 있고, 인디의 snmp를 가지고 agent , manager 둘다 가능하다고
: : 하는데 어떻게 해야 하는지 간단한 샘플프로그램있으시면
: : 부탁드립니다.
: :
: : snmp 프로토콜은 처음 접해 보는것이라 생소해서 어디부터 손을 대야 할지 몰라서
: : 샘플 프로그램이라도 있으면 많은 도움이 될것 같습니다.
: :
: : 도움 부탁드립니다
:
:
:
: Indy 에서 제공되는 SNMP 컴포넌트는 Request 패킷을 보내고 Agent 로 부터 응답 결과를 받는 식의...
:
: 기초적인 쿼리수준의 기능만 구현되어 있을 뿐... Agent 기능 까지 구현되어 있는 것은 아닙니다.
:
: 패킷을 디코딩해서 MSG_GET, MSG_GETNEXT, MSG_GETBULK, MSG_SET 등의 SNMP PDU
:
: 코맨드 요구에 대해서 처리가 가능하도록 Agent 부분은 따로 구현해 줘야 합니다.
:
: SNMP를 사용하기 위해선 Indy SNMP 컴포넌트 자체 보다, SNMP 프로토콜에 대한 이해가 필요 한데요.
:
:
: Indy SNMP 컴포넌트 사용법은 아주 단순 합니다.
:
: 예를 들어서...
:
:
:
: IdSNMP1->Query->Clear();
: IdSNMP1->Query->Host = L"127.0.0.1";
: // IdSNMP1->Query->Community = L"public"; // default = public
: IdSNMP1->Query->PDUType = PDUGetRequest;
: IdSNMP1->Query->MIBOID->Add(L"1.3.6.1.2.1.1.1.0");
:
: if( IdSNMP1->SendQuery()) {
: for(int i=0; i < IdSNMP1->Reply->ValueCount; i++)
: {
: Memo1->Lines->Add(IdSNMP1->Reply->Value[i]);
: }
: }
:
:
: 위와 같은 식으로 'Qeury'를 설정해서 보내고, 'Reply'로 결과를 받으면 됩니다.
:
:
: 위에서는.. OID를 "1.3.6.1.2.1.1.1.0"로 보내고 있는데...
:
: Windows 7에서 SNMP Agent Server가 설치 되어 있다면... CPU 타입, OS 버전 등의 간단한 정보가 리턴 될 것이고...
:
: SNMP를 지원하는 라우터나 카메라 같은 장비에 쿼리를 보냈다면... 펌웨어 정보, 제조사 등 간단한 정보가 리턴 되겠죠.
:
: SNMP 프로토콜에서 OID는 트리구조의 오브젝트 타입을 '도트 뉴머릭' 형태로 표현한 건데..
:
: (1.3.6.1.2.1.1.1.)은 "iso.org.dod.internet.mgmt.mib-2.system.sysDescr"을 대신하는 '도트 뉴머릭'형태의 표현 입니다.
:
: 그래서 위와 같은 식으로 OID 쿼리를 보내면 'System Descriptor"를 의미하는 시스템 정보가 리턴 되는 거고요.
:
: OID 정의는 표준으로 정해진 것이 사용되기도 하고, 벤더가 커스텀 하게 정의해서 사용할 수도 있습니다.
:
: 갖고있는 네트웍 장비에서 SNMP 프로토콜을 지원하고 있다면, Agent 코드는 장비에서 펌웨어로 구현되어 있을 테니까,
:
: Agent 쪽은 신경 쓸 필요가 없을 겁니다.
:
: 만약 Agent를 직접 구현해야 한다면 SNMP 프로토콜 전반에 대해 세부적으로 이해하고 있어야 합니다.
:
: 중요한 건 Indy SNMP 컴포넌트의 사용방법 숙지가 아닌, SNMP 프로토콜 자체 입니다.
:
: OID, MIB, SNMP 프로토콜에 대한 RFC 문서라도 먼저 정독해서 읽어 보는 게 필요 할 것으로 보이네요.
:
:
:
: ...