C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[22100] 감사합니다 ^^ 빌더님 도움으로 일을 마쳤습니다 ^^
카라얀 [lovekorea] 4685 읽음    2012-11-19 17:42
빌더님이 도와주셔서 무사히 마쳤습니다. 빌더님이 알려주신 두번째 방법으로 했더니 장비가 잘 동작하네요. 감사합니다 ^^
아 ~ WinRT에 대해서 빌더님께 여쭤볼께 있는데 그건 다음으로 미룰께요. 고마워요 빌더님 ^_^



빌더(TWx) 님이 쓰신 글 :
: 카라얀 님이 쓰신 글 :
: : SNMP 프로토콜에 대해서 잘알고 있거나 구현해보신 분 계신가요.
: : RFC 파일 다운 받아 읽어봐도 감을 못잡겠습니다 ㅡㅡ 원거리에 몇개씩 설치되어있는 장비인데요.
: :
: : 엔터프라이즈 OID로 1.3.6.1.4.1.56789를 쓰고, WarmStart 값으로 1, Specific 값으로 0x3963 을 사용해서 TCP로 SNMP 패킷을 조합해서 보내주면 장비가 리부트 하게 되있으니까, 패킷을 조합해서 전송하는 코드를 구현하라는 지시가 떨어졌는데 어떤 식으로 패킷을 조합해서 보내야 할지 전혀 감을 못 잡고있습니다. 네트웍 프로토콜 잘 아시는 분 도와주세요. ㅜㅜ
: :
: : OID 가 잘못 적혔네요. 정확하게 1.3.6.1.4.1.56789.129 이고, 커뮤니티는 'DPass1567Environment' 입니다.
:
:
:
:
:
: 답변)
:
:
:
: SNMP 프로토콜 레벨에서 패킷을 처리하는 방법을 물으셨는데...
:
: 질문에서 요구되는 조건을 만족하기 위해선... Sequence 형식으로 SNMP 패킷을 조합해서 보내야 합니다...
:
:
: 그리고 하나의 Sequence 블럭은...
:
:
: SEQUENCE 임을 나타내는 Sequence Signature(0x30), Version Number, Community Octet, PDU Chunk 로 구성되게 됩니다...
:
: 여기서 PDU Chunk 는... OID, IP Address, Generic Type, Specific Type, Time Stamp 로 세분화 되게 됩니다....
:
:
:
: SNMP 프로토콜 레벨에서 각기 Chunk의 패킷 구조를 살펴 보면...
:
:
:
:
: OID 처리 부터 살펴 보죠...
:
:
:
: 1.3.6.1.4.1.56789.129
:
: 위와 같은 OID가 있다고 할 때... 1과 3을 각기의 바이트 형태 그대로 보내지 않고..
:
: 처음 두개의 OID 넘버는.. (1 * 40) + 3 = 43(0x2B) 식으로...
:
: 첫번째 값에 40을 곱하고, 두번째 값을 더해서 보내게 되는데..
:
:
: Root(1) 로 시작하는 OID 넘버에서 앞 부분은 작은 수로 시작하기 때문에...
:
: 위와 같은 식으로 처리하면 전송되는 패킷을 한바이트로 줄일 수 있기 때문 입니다..
:
:
: 앞부분 두개를 제외한 나머지는 7bit 형식으로 묶는 방식으로 패킷을 조합하게 됩니다.
:
: 위에서... 6, 4 같은 경우는 그값 그대로 사용하면 되지만...
:
:
: 예를 들어서 ...
:
: 1.3.1.4.1.311 과 같은 OID가 있다고 할 때....
:
: 311의 경우 Hex 값으로 표현하면 값이 0x0137 이죠..
:
:
: 이 경우...
:
: Leftmost 값인 0x01 의 최상위 비트를 1로 하고... Rightmost 값인 0x37의 최상위 비트는 무시한 후...
:
: Leftmost 값의 하위 4비트 Nibble을 왼쪽으로 1비트씩 쉬프트 해서 패킷을 7비트 형식으로 표현하게 됩니다.
:
: 결과 값은 0x8237 이 됩니다.
:
:
:
: 위와 같은 방식을 적용하게 되면...
:
:
: '1.3.6.1.4.1.56789.129' OID의 변환된 패킷 형태는 
:
: '2B 06 01 04 01 83 BB 55 81 01' 이 됩니다 (Hex 값) 10개 (0x0A)
:
:
: 여기에 OID 데이타 타입을 나타내는 Signature 로 0x06 이 사용되고...
:
: Length 값인 10 이 하나로 묶여서 SNMP OID 패킷형태의 Chunk 가 완성되어야 하므로 전체적인 값은...
:
: '06 0A 2B 06 01 04 01 83 BB 55 81 01' (Hex 값) 이 됩니다.
:
:
:
:
:
: IP Address의 경우...
:
:
: Agent로 패킷을 보내는 쪽의 IP가 "192.168.123.124"라고 가정할 때...
:
: Hex 값으로 표현하면.. 'C0 A8 7B 7C'이니까...
:
: IP 어드레스임을 나타내는 Signature(40)과 Lengh(04)를 포함해서 표현하면..
:
: '40 04 C0 A8 7B 7C'로 하나의 Chunk 단위 패킷이 완성 됩니다.
:
: IP Address의 경우... Multi Session Agent를 구현할 때... 이용 되기도 합니다..
:
:
:
: Community 의 경우...
:
:
: "DPass1567Environment" 를 Hex로 표현하면...
:
: '44 50 61 73 73 31 35 36 37 45 6E 76 69 72 6F 6E 6D 65 6E 74' 입니다 (20개 0x14)
:
: Community 의 데이타 타입임을 나타내는 Octet의 Signature(04)와 Lengh(14)를 포함해서...
:
: 하나의 Chunk 로 표현하면...
:
: '04 14 44 50 61 73 73 31 35 36 37 45 6E 76 69 72 6F 6E 6D 65 6E 74'가 됩니다...
:
:
:
:
: Time Stamp 의 경우...
:
: 10 mSec 단위의 시스템 경과 시간을 나타내는 Stamp로 사용되는데... 0 이라고 가정한다면..
:
: TimeStamp의 Signature인 '43'과 Length(1), 값(0) 을 하나의 Chunk 로 묶어서 표현할 경우...
:
: '43 01 00' 이 되겠죠... 컴으로 부터 시스템 경과 시간을 알아내서 Time Stamp로 쓸 경우...
:
: 값을 보정해서 처리해주면 됩니다...
:
:
:
: 그리고...
:
: 질문 내용을 보면...
:
: WarmStart 값과... Specific 값... 둘다 언급하고 있는데...
:
:
: Agent를 구현할 때...
:
: Generic Type(WarmStar)이 사용되면... Specific Type은 정의를 하지 않고 사용하거나...
:
: 또는.. Specific Type을 사용하면 Generic Type를 정의하지 않고 사용하는 게 일반적인
:
: 구현 방법 입니다..
:
: 따라서... Generic Type(WarmStar)만 사용하던가.. 아니면 Specific Type만 사용하든가
:
: 하는 식으로 둘중에 하나의 방법을 선택해야 합니다...
:
:
:
: Sub Chunk 단위를 하나의 Sequence 로 패킷을 조합해서 전송해야 하므로...
:
: 위에서 구한 각기 Chunk 단위의 패킷들을... 묶어서...
:
: Sequence Signature(30) + Length + PDU Chunk + Sequnce Signature(30) 형태로 패킷을 조합하면...
:
:
: 1. Generic Type(WarmStar)을 사용할 때의 전체 패킷구조는...
:
:
: 30 38 02 01  00 04 14 44  50 61 73 73  31 35 36 37 
:
: 45 6E 76 69  72 6F 6E 6D  65 6E 74 A4  1D 06 0A 2B
:
: 06 01 04 01  83 BB 55 81  01 40 04 C0  A8 7B 7C 02
:
: 01 01 02 01  00 43 01 00  30 00
:
:
: 으로 되어야 하고...
:
:
:
: 2. Specific Type(0x3963)을 사용할 때는... Specific Type Signature(6) 과 함께 패킷이 조합되어야
:
: 하므로 전체 패킷 구조는...
:
:
:
: 30 39 02 01  00 04 14 44  50 61 73 73  31 35 36 37
:
: 45 6E 76 69  72 6F 6E 6D  65 6E 74 A4  1E 06 0A 2B
:
: 06 01 04 01  83 BB 51 81  01 40 04 C0  A8 7B 7C 02
:
: 01 06 02 02  39 63 43 01  00 30 00
:
:
: 으로 되어야 합니다...
:
:
:
: 각기 Chunk 단위의 Length 는 128(0x80)이 넘는 경우... 최상위 비트를 1로 한 상태에서...
:
: 나머지 비트스트림을 길이로 표현하는...Long Form 형식의 변환 방법은 간단하니까 생략 합니다...
:
:
: 그리고...
:
: SNMP 프로토콜을 구현할 때... 보통 UDP 방식이 많이 사용되기는 하지만, SNMP 프로토콜 스펙에서
:
: 반드시 UDP 를 사용해야 한다고 강제하고 있지 않기 때문에... TCP 방식이 사용될 수도 있습니다...
:
: TCP를 사용하든 아니면 UDP를 사용하든 상관 없습니다... Agent가 TCP로 구현되어 있으면...
:
: 패킷을 보낼 때... TCP로 보내면 그만인 거죠...
:
:
: v3 레벨도 구현해야 한다면... 암호화 처리를 위한 DES 알고리즘도 구현해야 하고..
:
: SNMP 프로토콜 수준에서 Agent 를 구현하기 위해선... 프로토콜 전반에 대해서 세부적으로 숙지하고 있어야 합니다...
:
:
:
:
:
:
: ...

+ -

관련 글 리스트
22089 SNMP 프로토콜 구현해보신 분~ 카라얀 5201 2012/11/15
22095     Re:SNMP 프로토콜 구현... 빌더(TWx) 6218 2012/11/16
22100         감사합니다 ^^ 빌더님 도움으로 일을 마쳤습니다 ^^ 카라얀 4685 2012/11/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.