SNMP V2, Synapse, 64-битные счетчики
От: buzik  
Дата: 08.03.12 08:15
Оценка:
Снимаю показания счетчиков трафика с железяк.
Проблема начинается, когда нужно снять показания с гигабитного порта, с 64 битного счетчика, используя 2ю версию SNMP.

var
snmp : tsnmpsend;
begin
 snmp := tsnmpsend.Create;
 try
   memo3.Lines.Clear;
   snmp.Query.Clear;
   snmp.Query.Version := 2;
   snmp.Query.Community:='public';
   snmp.TargetHost := '192.168.1.6';
   snmp.Query.PDUType := PDUGetRequest;
   snmp.Query.MIBAdd('1.3.6.1.2.1.31.1.1.1.6.5','',ASN1_NULL);
   if snmp.SendRequest then
     begin
       memo3.Lines.Add(snmp.Reply.MIBGet('1.3.6.1.2.1.31.1.1.1.6.5'));
       memo3.Lines.Add(asndump(snmp.Reply.EncodeBuf));
     end;
 finally
   snmp.Free;
 end;



Если использую стандартные 32-битные счетчики (вроде 1.3.6.1.2.1.2.2.1.10), то все хорошо, но если 64 битные (1.3.6.1.2.1.31.1.1.1.6) то получаю вот такие значения:
~P‚F\
 «…kê
 ¬D8ã
 çv 
Хотя там должно быть значение похожее на это: 138884310018294
Оиды брал отсюда: http://knowledgebase.solarwinds.com/kb/questions/1196/
От всех 64-битных, приходят кракозябры, а от 32 нет.
Причем, если снифать трафик, то видно что отправлено правильное значение.

Подскажите где ошибка, что делаю не так.
Возможно есть способ расшифровать кракозябру, и получить нормальное значение?
snmp delphi
Re: SNMP V2, Synapse, 64-битные счетчики
От: Dimonka Верблюд  
Дата: 09.03.12 17:19
Оценка:
Здравствуйте, buzik, Вы писали:


B>Если использую стандартные 32-битные счетчики (вроде 1.3.6.1.2.1.2.2.1.10), то все хорошо, но если 64 битные (1.3.6.1.2.1.31.1.1.1.6) то получаю вот такие значения:

B>~P‚F\
B> «…kê
B> ¬D8ã
B> çv 
B>Хотя там должно быть значение похожее на это: 138884310018294

Попробуй конвертнуть кракозябу из UTF8 в свою кодировку, очень похоже на то.
Re: SNMP V2, Synapse, 64-битные счетчики
От: beezon  
Дата: 24.11.12 08:27
Оценка:
Здравствуйте, buzik, Вы писали:


B>Подскажите где ошибка, что делаю не так.

B>Возможно есть способ расшифровать кракозябру, и получить нормальное значение?

Вот способ перевести "кракозябру" в нормальное значение:

function ASN1_To_Int64 (Value:string):int64;
var
x:byte;
y,i:integer;
z:int64;
begin
z := 0;
for i := 1 to length(Value) do begin
x := Ord(Value[i]); //get the byte
y := x; //promote to an integer
z := (z * 256) + y; //now accumulate value
end;
Result := z;
end;

Соответственно, вместо Value — передать кракозябру, на выходе результат в виде INT64;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.