SNMP——简单网络管理协议;
MIB——管理信息库,任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等;
SMI——管理信息结构,SMI定义了SNMP框架所用信息的组织、组成和标识,它还为描述MIB对象和描述协议怎样交换信息奠定了基础;
SMI的数据类型:Integer,octet string,OBJECT IDENTIFIER,SEQUENCE,IpAddress,counter,Gauge,time ticks。
说明:0x2表示整型,0x4表示oct string类型,0x30表示sequence类型,0x6表示trap oid类型。
len=recv(buf,...)
ptr=buf;
extract_header(ptr,len,0x30,&msg_len,byte_count);
ptr+=byte_count;
if(ptr[0] != ox2)
return "不是正确的数据类型";
extract_version(ptr,len,&val,byte_count);
ptr+=byte_count;
if(ptr[0] != 0x4)
retrun "不是正确的数据类型";
extract_octstring(ptr,...,byte_count);
ptr+=byte_count;
if(ptr[0] != 0xa7)
return "不是正确的数据类型";
extract_pdutype(ptr,...,byte_count);
ptr+=byte_count;
if(ptr[0] != ox2)
return "不是正确的数据类型";
extract_request_id(ptr,...,byte_count);
ptr+=byte_count;
if(ptr[0] != ox2)
return "不是正确的数据类型";
extract_error_status(ptr,...,byte_count);
ptr+byte_count;
if(ptr[0] != ox2)
return "不是正确的数据类型";
extract_error_index(ptr,...,byte_count);
ptr+=byte_count;
if(ptr[0] != 0x30)
return "不是正确的数据类型";
extract_variable_binding(ptr,...,byte_count);
ptr+=byte_count;
if(ptr[0] != 0x30)
return "不是正确的数据类型";
extract_update_time(ptr,...,&seq_len,byte_count);
ptr+=byte_count;
ptr+=seq_len;
if(ptr[0] != 0x30)
return "不是正确的数据类型";
extract_trap_oidlen(ptr,...,&seq_len,byte_count);
ptr+=byte_count;
ptr+=seq_len;
if(ptr[0] != 0x30)
return "不是正确的数据类型";
extract_mac_ken_len(ptr,...,&seq_len,byte_count);
ptr+=byte_count;
ptr+=seq_len;
if(ptr[0] != ox6)
return "不是正确的数据类型";
extract_mac_oid_len(ptr,...,&seq_len,byte_count);
ptr+=byte_count;
ptr+=seq_len;
if(ptr[0] != 0x4)
retrun "不是正确的数据类型";
extract_mac_oid_value(ptr,...,&mac_len,byte_count);
至此解析成功mac地址,其他的企业oid字段解析同理。