darklite44 Posté(e) le 14 mai 2015 Signaler Posté(e) le 14 mai 2015 Bonjour, J'essaie de trouver comment encoder dynamiquement une un nombre en OCTET STRING ASN.1. La valeur STRING: "57" devient donc OCTET STRING "30 04 02 35 37" On voit bien la structure avec un décodeur en ligne : http://lapo.it/asn1js/#04023537 Des idées ? -- Mib type codes ------------------------------------------------------------------------------ TYPE_OTHER = 0 TYPE_OBJID = 1 TYPE_OCTETSTR = 2 TYPE_INTEGER = 3 -- print any variable content function printr(v,l,k) local d=function(t)fibaro:debug(t);end if(not l)then l=0;end local s=string.rep(string.char(0xC2,0xA0),(l*3)); local n="";if(k)then n=k.." = ";end if(v and type(v))then if(type(v)=="table")then d(s..n.."{");local i,j;for i,j in pairs(v)do printr(j,(l+1),tostring(i));end d(s.."}");elseif(type(v)=="function")then d(s..n..tostring(v).."() {");d(s.."}");elseif(type(v)=="userdata")then d(s..n..tostring(v).."() {");d(s.."}");elseif(type(v)=="string")then if(#v>50)then d(s..n.."String["..#v.."] = \""..string.sub(v,1,80).."\"...");else if(k)then v="\""..v.."\"";end d(s..n..tostring(v));end elseif(type(v)=="number")then d(s..n..tostring(v));else d(s..n..tostring(v).."["..type(v).."]");end else d(s..n.."{nil}");end end -- Value (OctetString): 3537 (3)5(3)7 ==> ID = 57 -- request: snmpset -v1 -c public 192.168.1.248 1.3.6.1.4.1.8711.101.13.1.3.28.0 s 57 -- response: iso.3.6.1.4.1.8711.101.13.1.3.28.0 = STRING: "57" -- cela va changer la chaine de votre décodeur sur la 8. -- 303002010004067075626c6963a323020430e1442102010002010030153013060d2b06010401c407650d01031c000402 3537 = (57) local STRING_CMD_0 = '0x' .. TYPE_INTEGER .. '5'; local STRING_CMD_1 = '0x' .. TYPE_INTEGER .. '0'; fibaro:debug("STRING_CMD: " .. STRING_CMD_0 .. ", " .. STRING_CMD_1); PACKET_COMMAND = string.char(STRING_CMD_0, STRING_CMD_1); printr(PACKET_COMMAND)
Messages recommandés