2014-06-05 1 views
0

월요일에 net-snmp 메일 링리스트에이 메일을 올렸지 만 응답이 없으므로 여기에서 시도하고 있습니다. 혼란스럽고 누군가 도와 드릴 수 있기를 바랍니다.은 요청 ID asn.1이 (가) 인코딩 되었습니까?

Cortex M4 응용 프로그램 용 SNMP 에이전트를 작성하고 있습니다. 내가 구입 한 SNMP 책과 그물에서 읽은 책은 모든 데이터 필드가 ASN.1로 인코딩되어야 함을 나타냅니다. OID는 ASN.1로 인코딩되어 있습니다. 요청 ID와 같은 다른 필드에 적용되는지 확실하지 않습니다.

net-snmp에서 보낸 snmp 명령을 보면 요청 ID 필드가 간단한 (4 바이트) 32 비트 정수인 것처럼 보입니다. 헥스

http://www.ko4bb.com/net-snmp/RequestID.png

그것은 RequestID가 1,750,020,546는 (10 진수)로 나타내고 0x684F31C2 : 여기 스크린 와이어 샤크 통해 모니터링 지원 snmpget 트랜잭션을 나타내는 총이다. Wireshark의 데이터 필드에서도 "68 4f 31 c2"로 표시됩니다.

이것은 ASN.1로 인코딩되지 않습니다. 그렇지 않으면 첫 번째 3 바이트의 비트 7이 1로 설정되고 마지막 바이트의 비트 7이 설정됩니다 0으로 설정하면 처음 세 값은 0x7F 이상이고 마지막 값은 <이어야합니다. 0x80

따라서 RequestID 필드에는 ASN.1이 사용되지 않으니까?

답변

2

wireshark 태그는 Wireshark 문제이므로 추가했습니다.

요청 ID 필드는 ASN.1 BER 형식 (정확히 02 04 68 4f 31 c2)입니다.

Wireshark가 너무 똑똑해서 데이터를 구문 분석하고 일부 세부 정보를 숨기지 않도록주의해야합니다.

68 4f 31 c2이 강조 표시된 botton 패널을 확인하십시오. Wireshark는이를 강조하지만 의도적으로 02 04을 무시합니다. 그것이 문제이다.

@GuyHarris가 의견에서 지적했듯이이 Wireshark 동작은 구성 가능합니다. 다른 패킷 분석기 (예 : Microsoft 네트워크 모니터)는 동일한 시나리오에서 다르게 동작 할 수 있습니다.

+0

"요청 ID 필드는 엄격하게 ASN.1 형식으로, '02 04 68 4f 31 c2'입니다." 이것이 ASN.1 BER (Basic Encoding Rules) 형식입니다. ASN.1은 인코딩을 지정하지 않습니다 (Packed Encoding 규칙도 있음). "Wireshark가 너무 똑똑해서 데이터를 파싱하고 세부 정보를 숨길 수 없으니주의해야합니다." Wireshark의 "내부 BER 캡슐화 토큰 표시"환경 설정에서 BER 프로토콜을 사용하도록 설정하면 해당 세부 정보가 표시됩니다. 그건 단지 기본값이 아닙니다. –

+0

감사합니다. 그러나 이것은 제 문제는 아닙니다. 02 04 68 4f 31 c2는 ASN.1 BER로 인코딩되지 않은 것으로 보입니다. ASN.1 BER에 대한 정의에 따르면 값이 127보다 크면 첫 번째 바이트에는 7 개의 LSB가 포함되고 비트 7에는 1이 설정되고 나머지는 다음 바이트에 코딩됩니다. 예를 들어 값 42564는 0x82, 0xCC, 0x44로 인코딩되거나 헤더를 포함하는 경우 0x02, 0x03, 0x82, 0xcc, 0x44로 인코딩해야합니다. net-snmp는 단순히 정수 값을 값에 관계없이 4 바이트로 인코딩합니다. 예를 들어 net-snmp가 1 또는 2의 요청 ID 값을 강제로 전송하도록하는 방법을 찾지 못했습니다. – Didier

+0

이것은 정수가 OID 필드에 인코딩되는 방식입니다. 이 인코딩 규칙은 OID에만 적용되는 것으로 보입니다. 아마도 이것이 내 실수입니다. – Didier

관련 문제