2012-05-25 2 views
5

SNMP 에이전트를 작성 중이며 MIB 정의에 Unsigned32 유형의 OID가 포함되어 있습니다.SNMP 유형 Unsigned32의 올바른 인코딩은 무엇입니까?

에이전트의 Unix 구현은 Net-SNMP를 사용하고 ASN_UNSIGNED32가 없기 때문에 OID를 ASN_UNSIGNED 유형으로 설정합니다. Wireshark로 GET 응답을 보면 "Gauge32"값으로 디코딩됩니다. RFC 1902에 따르면 Unsigned32와 Gauge32가 동일하기 때문에 처음에는 의미가 있습니다.

Windows 구현은 Windows의 SnmpAPI.lib을 기반으로하며 OID를 ASN_UNSIGNED32로 설정하고 Wireshark로 GET 응답을 보면 "Unsigned32"로 디코딩됩니다. 그건 나에게 더 좋아 보인다.

어떻게 2 가지 구현이 서로 다른 결과를 이끌어 낼 수 있습니까?

올바른 버전은 무엇이며 어떻게 구현할 수 있습니까?

답변

5

Net-SNMP는 Unsigned32와 Gauge32가 동일한 현재의 RFC 1902 인코딩을 사용하고 Windows는 Unsigned32와 Gauge32가 다른 인코딩을 사용하는 구식 RFC 1442 인코딩을 사용합니다.

+1

좋은 캐치. Windows 버그와 같습니다. –

+0

Microsoft는 RFC 1902가 나온 1996 년 이래로 SNMP 서비스를 실제로 업데이트하지 않았습니다. 따라서 그들은 옛 버전을 고수하고 있으며 대부분의 SNMOP 도구가 RFC 1442와 여전히 호환되는 것처럼 보입니다. –

1

Windows에 Wireshark 캡처를 저장 한 다음 Unix의 Wireshark에서 열 경우. 그런 다음 유형이 무엇인지 확인할 수 있습니다. Unsigned32와 Gauge32는 표준에 의해 정의 될 수 있으므로 모든 SNMP 구현에서 전혀 다른 것이 없어야합니다. 유선에서는 동일한 바이트를 전송해야합니다.

+0

내가 생각한 바에 따르면 Linux에서는 Wireshark 추적이 모두 수행되었고 Linux 에이전트의 OID는 Gauge32로 표시되고 Windows 에이전트의 것은 Unsigned32로 표시됩니다. 동일한 머신에서 동일한 Wireshark 실행 파일. –

+0

Wireshark 파서를 들여다 볼 시간이 없었습니다. 하지만 제가 말했듯이, 원시 바이트를 읽어야합니다. 그거 했니? –

관련 문제