SNMP 시스템은 SNMP Manager 및 SNMP Agent로 나눠지는데, SNMP Agent는 MIB 데이터베이스, 즉 데이터 저장소의 역할을 하고, SNMP Manager는 SNMP Agent에 접근하여 정보를 읽고 쓰는 역할을 합니다. 사용자는 이 SNMP Manager에 접근하여 실제 데이터를 읽거나 쓰게 됩니다.
그런데 윈도 서버에서는 이런 구분이 없고 딸랑 SNMP 서비스만 있습니다. 즉, SNMP Manager 기능에 SNMP Agent 기능까지 모두 한꺼번에 가지고 있는 "SNMP 서버"라고 보시면 됩니다.
그리고 SNMP 트랩 서비스라는 것도 있는데 이것은 로컬 및 외부 SNMP Agent로부터 받은 트랩 메시지를 SNMP Manager로 전달하는 역할을 하는 서비스입니다. 즉 로컬 SNMP 서비스에 트랩 서버로 자기 자신을 등록하면 트랩 메시지가 SNMP Agent(서비스) --> SNMP 트랩 서비스 --> SNMP Manager(서비스)로 전달됩니다. (이것은 트랩 서버를 등록하지 않고 SNMP 서비스로만 동작하는 것과 동일한 결과입니다.)
SNMP에 사용자 정의 값을 쓰기 위해서는 다음 차례대로 하시면 됩니다. (읽을 때는 2~3 과정 불필요)
1. SNMP 서비스 설치
à 당연히 윈도 CD를 넣고 설치해야 합니다.
à 설치 후 서비스에서 SNMP 커뮤니티(보통: “public”) 및 수신 대상 IP주소를 입력해야 합니다.
2. SNMP 확장 Agent (확장 DLL) 작성: C++/Win32, MIB OID 확장을 위해
à 시스템에서 제공하는 MIB OID값들은 읽기 전용입니다. 따라서 새 값을 쓰려면 새 OID를 사용할 수 있도록 확장해야 합니다.
à 참고: http://www.codeproject.com/KB/IP/SNMP_Agent_DLL__Part1_.aspx
à 위 사이트에서 소스를 받아서 OID값 및 사용할 OID의 개수(갯수X)를 지정하고 컴파일하면 됩니다. 그밖의 코드는 수정할 필요가 없습니다.
3. SNMP 확장 Agent 등록: Registry, SNMP 서비스에 확장된 OID를 인식시키기 위해
à 위에서 만든 확장 DLL이 동작하기 위해서는 레지스트리에 등록해야 합니다. 물론 SNMP 서비스를 재시작해야 적용됩니다.
à 참고: http://www.codeproject.com/KB/IP/SNMP_Agent_DLL__Part2_.aspx
à 위 사이트에 자세히 설명되어 있습니다.
4. SNMP 값 읽기/쓰기
à SNMP에 값을 읽고 쓰는 부분을 C/C++로 Win32API 코드를 직접 만들어서 하려면 복잡하고 어렵습니다. C#에서 아주 쉽게 사용할 수 있도록 캡슐화되어 있는 라이브러리가 공개되어 있습니다.
à 참고: http://www.codeproject.com/KB/cs/SNMPDLL.aspx
à 위 사이트에서 받아서 그대로 사용하면 됩니다.
샘플 코드는 다음과 같습니다.
using SNMPDll; ... SNMPObject setInfo = new SNMPObject(“1.3.6.1.4.1.15.0.0.1”); // SNMP 읽기/쓰기를 할 OID 항목 SNMPAgent agent = new SNMPAgent(“127.0.0.1”, "public", "public"); // SNMP 서버 및 커뮤니티 agent.setValue(setInfo, SNMPOIDType.OctetString, “test”); // 문자열 값 쓰기
5. SNMP 값 확인
à SNMP에 쓴 값을 읽기 위해 별도 테스트 코드를 만들어봐도 되지만, MIB Browser라는 프리웨어 툴을 사용하면 더 쉽게 확인할 수 있습니다.
à 참고: http://www.ireasoning.com/download.shtml
à 위 사이트에서 MIB Browser를 내려 받아 설치, 실행하면 됩니다.
à OID 입력 창에 위 샘플 코드로 기록한 OID인 “1.3.6.1.4.1.15.0.0.1”을 넣고 get을 선택하면 해당 값이 나옵니다.
'Tech: > .NET·C#' 카테고리의 다른 글
SNMP 트랩 메시지 전송 클래스 (1) | 2008.08.21 |
---|---|
윈도 서비스 확장 클래스: ServiceInstallerEx (0) | 2008.08.14 |
MessageBoxEx (0) | 2008.08.07 |
비 .NET(unmanaged) 에서 호출할 수 있도록 DLL 내보내기 (0) | 2008.06.26 |
ASP.NET IHttpHandler와 IHttpModule (0) | 2008.06.26 |