1.MIB 管理信息库 
2.通过SNMP(简单网管协议)来管理网络设备的状态、网络流量等
  SNMP是一系列协议组和规范,它们提供了一种从网络上的设备中收集网络管理信息的方法
  当然支持SNMP的设备才能进行管理
  使用(SNMPV1-V3)接口进行编程
3.V1的5个请求/响应原语:
  get-request 
  set-request 
  get-next-request 
  get-reponse 
  trap 
4.我有WINDOWS下的库,但无源代码
  

解决方案 »

  1.   

    MIB:  参考 <<Internet协议手册>> 超星图书馆. 中文版的
      

  2.   

    to jeff_z
       我是第一次接触这些,您能否说明一下怎样来调用MIB  来进行编程
    例如用VB ,VC等
      

  3.   

    to xiaoya
      那有下载的,请告诉我
      

  4.   

    编程控制SWITCH?交换机?黑客?!
      

  5.   

    MIB是管理信息库,你可以参考SNMP(简单网络管理协议)的有关书籍,上面介绍很详细的。 
      

  6.   

    SNMP(简单网络管理协议)是一个应用层协议,用于在网络设备间交换管理信息,他是TCP/IP协议套件的一部分。它是网络管理人员能够管理网络,发现并解决网络问题,规划网络的发展。SNMP管理的数据包括被管理对象、代理和网络管理系统(NMS)三个主要组件。被管理设备是网络节点,包括一个驻留的SNMP代理(Agent)。代理(Agent)是一个网络感里软件模块,驻留在一个被管理设备中;NMS监测并控制被管理设备。 SNMP的基本命令:read、write、trap和traversal。NMS用read命令监测被管理设备;NMS用write命令控制被管理设备;被管理设备用trap命令异步地向NMS报告事件;NMS用traversal操作决定被管理设备支持哪一个变量值,并不断为参数表收集信息,如路由信息。 SNMP管理信息库(MIB)是一个信息的集合,它分层组织,形成一个树形结构。用网络管理协议可以访问MIB。MIB由被管理对象组成,并有对象标签标识。对象标识在MIB树种唯一标识一个被管理对象。
      

  7.   

    楼上大虾说的对,mib库是树形结构,节点有编号,
    管理对象表示成字符串".1.4.2.7.3.11.2.1.16"
    我有一些相关原代码,unix c.
    要吗
      

  8.   

    我有写相关源码,unix c的库.要吗
      

  9.   

    关键的代码CSnmpMan::CSnmpMan()
    {
    }CSnmpMan::CSnmpMan(char* community,char* variable,int command)
    {
    for (int i=0;i<32;i++)
    this->community[i]=community[i];
    for (i=0;i<VAR_LEN;i++)
    this->variable [i]=variable[i];
    this->command=command;
    }
    CSnmpMan::~CSnmpMan()
    {
    }
    BEGIN_MESSAGE_MAP(CSnmpMan, CWnd)
    //{{AFX_MSG_MAP(CSnmpMan)
    // NOTE - the ClassWizard will add and remove mapping macros here.
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // CSnmpMan message handlersvoid CSnmpMan::ASNCode()
    {
    int counter;
    u_char *cp,*com,*count;
    int lab=1;
    u_char *pointer;
        int i;    for(i=0;i<MAX_LEN;i++)
    packet[i]='\0';
    pointer=packet;
    cp=packet;
    *cp++=(u_char)0x30;
    cp++;   // totallength
    *cp++=(u_char)0x02;
    *cp++=(u_char)0x01;
    *cp++=(u_char)0x00;
      
    // AfxMessageBox((LPCTSTR)packet);
    com=(u_char *)community;
    *cp++=(u_char)0x04;
    *cp++=(u_char)strlen((char *)com);
        strcpy((char *)cp,(char *)com);
    cp+=strlen((char *)com); if (command==SNMP_GET)
    *cp++=(u_char)0xa0;   // get command
    else 
    if (command==SNMP_GETNEXT) 
    *cp++=(u_char)0xa1;// get-next command
        cp++;
    *cp++=(u_char)0x02;
    *cp++=(u_char)0x04;
    for(i=0;i<4;i++) 
    *cp++=(u_char)0x00;
    for(i=0;i<2;i++) {
    *cp++=(u_char)0x02;
    *cp++=(u_char)0x01;
    *cp++=(u_char)0x00;
    }
    *cp++=(u_char)0x30;
    cp++;//len
    *cp++=(u_char)0x30;
    cp++;//len
    *cp++=(u_char)0x06; com=(u_char *)variable;
    com+=3;
        counter=0;
    count=(u_char *)variable;
    while(*count!=0) {
    if(*count=='.') counter++;
    count++;
    }
    *cp++=counter;
    *cp++=(u_char)0x2b; while(*com!=0){
    if(*com!='.')
    if(*(com+1)!='.'&&*(com+1)!=0){
    if(*(com+2)!='.'&&*(com+2)!=0) {
    *cp++=(u_char)((*com-48)*100+(*(com+1)-48)*10+(*(com+2))-48);
    com+=3;
    }
    else{
    *cp++=(u_char)((*com-48)*10+(*(com+1))-48);
        com+=2;
    }
    }
    else *cp++=(u_char)*com++-48;
    else com++;
    } *cp++=(u_char)0x05;
    *cp++=(u_char)0x00;
        pointer+=lab;
    *pointer=(u_char)(cp-packet-2);
    pointer+=5;
    pointer+=*pointer;
        pointer+=2;
    *pointer=packet[1]-(pointer-packet-1);
    pointer+=14;
        *pointer=packet[1]-(pointer-packet-1);
    pointer+=2;
        *pointer=packet[1]-(pointer-packet-1);
    packet[100]='1';///for debug
    // TRACE("%s",packet);}void CSnmpMan::ASNDecode()
    {
    int pos=0; int len;
    unsigned int rLen;
    unsigned long int packetlen;
    u_char *pac,*tmp; pac=packet;
    pac++;//忽略第一字节,第二字节为记录对象长度
    //////////判断是否为短格式即长度八位组为0xxxxxxx的格式
        if((*pac&0x80)!=0) {//非短格式,处理
    len=*pac-0x80; pac++;
    packetlen=*pac++;
    len--;
            while(len!=0){
    packetlen<<=8;
    packetlen+=*pac++;
    len--;
    }
    }
    else packetlen=*pac;//短格式,记录对象长度 pac=packet;         //从包头开始剥去信息包外壳
    pac++; // 略过第一字节
    if(*pac>0x80) pac+=*pac-0x80+1;
    else pac++;          //略过包长度字节(可能为多字节)
    pac++;
    pac+=*pac+1; // 略过版本信息,长度+1
    pac++;              
    pac+=*pac+1;        // 略过共同体信息,长度+1
    pac++;
    if(*pac>0x80) pac+=*pac-0x80+1;
    else pac++;         // ?
    pac++;
    pac+=*pac+1;       // 略过request id
    pac++;
    pac+=*pac;         // 错误状态码
    switch(*pac){
    case 0:
    break;
    case 1: AfxMessageBox("pdu size too big!");
    return;
    case 2: AfxMessageBox("no such name!");
    return;
    case 3: AfxMessageBox("bad value!");
    return;
    case 4: AfxMessageBox("this item is readonly!");
    return;
    case 5: AfxMessageBox("generate error!");
    return;
    default: break;
    }
    pac++;
    pac++;                // 
        pac+=*pac+1;          // 
        pac++;   // 
        if(*pac>0x80)         // 
    pac+=*pac-0x80+1;
        else 
    pac++;
    pac++;                // 
        if(*pac>0x80)         // 
    pac+=*pac-0x80+1;
        else 
    pac++;
    pac++; //pac指向对象ID长度
    if(command==SNMP_GETNEXT) {
    int varlen,objlen,objcount;
    for(objcount=0;objcount<128;objcount++)
    variable[objcount]=0;
    variable[0]='1';
    variable[1]='.';
    variable[2]='3';
    variable[3]='.';
    objlen= varlen =*pac-1;
    pac++;
    pac++;
    objcount=4;///////////////////对于get-next分析返回的oid以便下次传输使用
    while(objlen){
    if(*pac<10) 
    variable[objcount++]=*pac+48;
    else
    if(*pac<100) {
    variable[objcount++]=*pac/10+48;
    variable[objcount++]=*pac%10+48;
    }
    else {
    variable[objcount++]=*pac/100+48;
    variable[objcount++]=(*pac%100)/10+48;
    variable[objcount++]=(*pac%100)%10+48;
    }
    if(objlen!=1)
    variable[objcount++]='.';
    objlen--;
    pac++;
    }
    }
        else if (command==SNMP_GET)
    {
    pac+=*pac;
    pac++;
    }
        tmp=pac;
    tmp++;
    if (*tmp>128)
    {
    int lByte;
    int hByte;
    int lenlen=(*tmp)&0x7f;
    u_char* lbit;
    lbit=++tmp;
    if (*lbit>128)
    {
    hByte=1<<(lenlen*8);
    lByte=*lbit&0x7f;
    }
    else 
    hByte=0; for (int c=1;c<lenlen;c++)
    {
    lByte+=lByte<<8;
    lbit++;
    lByte=*lbit;
    }
    rLen=lByte+hByte;
    TRACE("%d\n",rLen);
    tmp+=lenlen-1;
    }
    else
    rLen=*tmp; //结果变量长度
    tmp++;
    GetVarType(pac);
    switch(*pac)  //*pac为变量类型 
    {
    case ASN_SEQ:
    break;
    case ASN_OCTSTR:
    ASN2str(tmp,rLen);
    break;
    case ASN_NULL:
            ASN2null();
    break;
    case ASN_OBJID:
    ASN2oid(pac,rLen);
    break;
    case ASN_IPADDR:
    break;
    case ASN_COUNTER32://可能大于四字节
    ASN2int64(tmp,rLen);
    break;
    case ASN_INT:      //四字节以内
    case ASN_GAUGE:
    ASN2int(tmp,rLen);
    break;
    case ASN_TIMETICKS:
    ASN2time(tmp,rLen);
    break;
    }}void CSnmpMan::Init(char *community, char *variable, int command)
    {

    for (int i=0;i<32;i++)
    this->community[i]=community[i];
    for (i=0;i<VAR_LEN;i++)
    this->variable [i]=variable[i];
    this->command=command;
    }void CSnmpMan::ASN2int(u_char *pack, int len)
    {
        int Low;
    // __int64 counter;
    u_char Hi;
        int tlen;
        char buf[128];
    for (int i=0;i<256;i++)
    result[i]='\0'; tlen=len;
    Low=*pack&0x7f;   //01111111 取出低字节
        Hi=*pack&0x80 ;   //10000000 取出高字节 for (tlen--,pack++;tlen>0;tlen --,pack++)
    Low=(Low<<8)|(int)*pack;
    // TRACE("%d,%d\n",Low,Hi);
    if (Hi)
    Low-=(1<<((len*8)-1));
    bitResult=Low;
    _itoa(bitResult,result,10);
    TRACE("%s\n",result);
    // packet[1000]='\0';
    }void CSnmpMan::ASN2int64(u_char *pack, int len)
    {
        __int64 Low;
    // __int64 counter;
    u_char Hi;
        int tlen;
        char buf[128];
    for (int i=0;i<256;i++)
    result[i]='\0'; tlen=len;
    Low=*pack&0x7f;   //01111111 取出低字节
        Hi=*pack&0x80 ;   //10000000 取出高字节 for (tlen--,pack++;tlen>0;tlen --,pack++)
    Low=(Low<<8)|(int)*pack;
    // TRACE("%d,%d\n",Low,Hi);
    if (Hi)
    Low-=(1<<((len*8)-1));
    counterResult=Low;
    _i64toa(counterResult,result,10);
    TRACE("%s\n",result);
    }void CSnmpMan::ASN2str(u_char *pack, int len)
    {
       for (int i=0;i<256;i++)
    result[i]='\0';
    for (i=0;i<len;i++)
    result[i]=*pack++;
        if (result[0]=='\0')
    ASN2null();
    //    TRACE("%s,%d\n",result,len);  
    // result[200]='a';
    }void CSnmpMan::ASN2null()
    {
        result[0]='n';
    result[1]='u';
    result[2]='l';
    result[3]='l';
    result[4]='\0';}void CSnmpMan::GetVarType(u_char *pack)
    {
    switch(*pack)  //*pac为变量类型 
    {
    case ASN_SEQ:
    varType="Sequence";
    break;
    case ASN_OCTSTR:
    varType="OctetString";
    break;
    case ASN_NULL:
    varType="Null";
    break;
    case ASN_OBJID:
    varType="ObjectId";
    break;
    case ASN_IPADDR:
    varType="IP Address";
    break;
    case ASN_COUNTER32:
    varType="Counter32";
    break;
    case ASN_INT:      
    varType="Integer";
    break;
    case ASN_GAUGE:
    varType="Gauge";
    break;
    case ASN_TIMETICKS:
    varType="TimeTicks";
    break;
    }
    }void CSnmpMan::ASN2oid(u_char *pack, int len)
    {
    int i=0;
    result[i++]='1';
    result[i++]='.';
    result[i++]='3';
    result[i++]='.';
    pack++;
    pack++;
    pack++;
    while(len)
    {
    if(*pack<10) 
    result[i++]=*pack+48;
    else
    if(*pack<100) 
    {
    result[i++]=*pack/10+48;
    result[i++]=*pack%10+48;
    }
    else 
    {
    result[i++]=*pack/100+48;
    result[i++]=(*pack%100)/10+48;
    result[i++]=(*pack%100)%10+48;
    }
    if(len!=1)
    result[i++]='.';
    len--;
    pack++;
    }
    result[i]='\0';
    }void CSnmpMan::ASN2time(u_char *pack, int len)
    {
        int Low;
    int day,hour,min,sec,msec;
    char dayStr[4];
    char hourStr[4];
    char minStr[4];
    char secStr[4];
    char msecStr[4];
    u_char Hi;
        int tlen;
        char buf[128];
    for (int i=0;i<256;i++)
    result[i]='\0'; for (i=0;i<4;i++)
    {
    dayStr[i]='\0';
    hourStr[i]='\0';
    minStr[i]='\0';
    secStr[i]='\0';
    msecStr[i]='\0';
    }
    tlen=len;
    Low=*pack&0x7f;   //01111111 取出低字节
        Hi=*pack&0x80 ;   //10000000 取出高字节 for (tlen--,pack++;tlen>0;tlen --,pack++)
    Low=(Low<<8)|(int)*pack;
    if (Hi)
    Low-=(1<<((len*8)-1));    msec=Low%100;
    Low=Low/100;
    sec=Low%60;
    Low=Low/60;
    min=Low%60;
    Low=Low/60;
    hour=Low%60;
    day=Low/60; _itoa(msec,msecStr,10);
    _itoa(sec,secStr,10);
    _itoa(min,minStr,10);
    _itoa(hour,hourStr,10);
    _itoa(day,dayStr,10); strcat(result,dayStr);
    strcat(result," 天 ");
    strcat(result,hourStr);
    strcat(result," 小时 ");
    strcat(result,minStr);
    strcat(result," 分钟 ");
    strcat(result,secStr);
    strcat(result," 秒 ");
    strcat(result,msecStr);
    strcat(result," 毫秒 "); TRACE("%s\n",result);
    }
      

  10.   

    主要代码,有问题请于我联系 [email protected]// SnmpMan.cpp : implementation file
    //#include "stdafx.h"
    #include "NetMan.h"
    #include "SnmpMan.h"
    #include "snmpasn.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    /////////////////////////////////////////////////////////////////////////////
    // CSnmpManCSnmpMan::CSnmpMan()
    {
    }CSnmpMan::CSnmpMan(char* community,char* variable,int command)
    {
    for (int i=0;i<32;i++)
    this->community[i]=community[i];
    for (i=0;i<VAR_LEN;i++)
    this->variable [i]=variable[i];
    this->command=command;
    }
    CSnmpMan::~CSnmpMan()
    {
    }
    BEGIN_MESSAGE_MAP(CSnmpMan, CWnd)
    //{{AFX_MSG_MAP(CSnmpMan)
    // NOTE - the ClassWizard will add and remove mapping macros here.
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // CSnmpMan message handlersvoid CSnmpMan::ASNCode()
    {
    int counter;
    u_char *cp,*com,*count;
    int lab=1;
    u_char *pointer;
        int i;    for(i=0;i<MAX_LEN;i++)
    packet[i]='\0';
    pointer=packet;
    cp=packet;
    *cp++=(u_char)0x30;
    cp++;   // totallength
    *cp++=(u_char)0x02;
    *cp++=(u_char)0x01;
    *cp++=(u_char)0x00;
      
    // AfxMessageBox((LPCTSTR)packet);
    com=(u_char *)community;
    *cp++=(u_char)0x04;
    *cp++=(u_char)strlen((char *)com);
        strcpy((char *)cp,(char *)com);
    cp+=strlen((char *)com); if (command==SNMP_GET)
    *cp++=(u_char)0xa0;   // get command
    else 
    if (command==SNMP_GETNEXT) 
    *cp++=(u_char)0xa1;// get-next command
        cp++;
    *cp++=(u_char)0x02;
    *cp++=(u_char)0x04;
    for(i=0;i<4;i++) 
    *cp++=(u_char)0x00;
    for(i=0;i<2;i++) {
    *cp++=(u_char)0x02;
    *cp++=(u_char)0x01;
    *cp++=(u_char)0x00;
    }
    *cp++=(u_char)0x30;
    cp++;//len
    *cp++=(u_char)0x30;
    cp++;//len
    *cp++=(u_char)0x06; com=(u_char *)variable;
    com+=3;
        counter=0;
    count=(u_char *)variable;
    while(*count!=0) {
    if(*count=='.') counter++;
    count++;
    }
    *cp++=counter;
    *cp++=(u_char)0x2b; while(*com!=0){
    if(*com!='.')
    if(*(com+1)!='.'&&*(com+1)!=0){
    if(*(com+2)!='.'&&*(com+2)!=0) {
    *cp++=(u_char)((*com-48)*100+(*(com+1)-48)*10+(*(com+2))-48);
    com+=3;
    }
    else{
    *cp++=(u_char)((*com-48)*10+(*(com+1))-48);
        com+=2;
    }
    }
    else *cp++=(u_char)*com++-48;
    else com++;
    } *cp++=(u_char)0x05;
    *cp++=(u_char)0x00;
        pointer+=lab;
    *pointer=(u_char)(cp-packet-2);
    pointer+=5;
    pointer+=*pointer;
        pointer+=2;
    *pointer=packet[1]-(pointer-packet-1);
    pointer+=14;
        *pointer=packet[1]-(pointer-packet-1);
    pointer+=2;
        *pointer=packet[1]-(pointer-packet-1);
    packet[100]='1';///for debug
    // TRACE("%s",packet);}void CSnmpMan::ASNDecode()
    {
    int pos=0; int len;
    unsigned int rLen;
    unsigned long int packetlen;
    u_char *pac,*tmp; pac=packet;
    pac++;//忽略第一字节,第二字节为记录对象长度
    //////////判断是否为短格式即长度八位组为0xxxxxxx的格式
        if((*pac&0x80)!=0) {//非短格式,处理
    len=*pac-0x80; pac++;
    packetlen=*pac++;
    len--;
            while(len!=0){
    packetlen<<=8;
    packetlen+=*pac++;
    len--;
    }
    }
    else packetlen=*pac;//短格式,记录对象长度 pac=packet;         //从包头开始剥去信息包外壳
    pac++; // 略过第一字节
    if(*pac>0x80) pac+=*pac-0x80+1;
    else pac++;          //略过包长度字节(可能为多字节)
    pac++;
    pac+=*pac+1; // 略过版本信息,长度+1
    pac++;              
    pac+=*pac+1;        // 略过共同体信息,长度+1
    pac++;
    if(*pac>0x80) pac+=*pac-0x80+1;
    else pac++;         // ?
    pac++;
    pac+=*pac+1;       // 略过request id
    pac++;
    pac+=*pac;         // 错误状态码
    switch(*pac){
    case 0:
    break;
    case 1: AfxMessageBox("pdu size too big!");
    return;
    case 2: AfxMessageBox("no such name!");
    return;
    case 3: AfxMessageBox("bad value!");
    return;
    case 4: AfxMessageBox("this item is readonly!");
    return;
    case 5: AfxMessageBox("generate error!");
    return;
    default: break;
    }
    pac++;
    pac++;                // 
        pac+=*pac+1;          // 
        pac++;   // 
        if(*pac>0x80)         // 
    pac+=*pac-0x80+1;
        else 
    pac++;
    pac++;                // 
        if(*pac>0x80)         // 
    pac+=*pac-0x80+1;
        else 
    pac++;
    pac++; //pac指向对象ID长度
    if(command==SNMP_GETNEXT) {
    int varlen,objlen,objcount;
    for(objcount=0;objcount<128;objcount++)
    variable[objcount]=0;
    variable[0]='1';
    variable[1]='.';
    variable[2]='3';
    variable[3]='.';
    objlen= varlen =*pac-1;
    pac++;
    pac++;
    objcount=4;///////////////////对于get-next分析返回的oid以便下次传输使用
    while(objlen){
    if(*pac<10) 
    variable[objcount++]=*pac+48;
    else
    if(*pac<100) {
    variable[objcount++]=*pac/10+48;
    variable[objcount++]=*pac%10+48;
    }
    else {
    variable[objcount++]=*pac/100+48;
    variable[objcount++]=(*pac%100)/10+48;
    variable[objcount++]=(*pac%100)%10+48;
    }
    if(objlen!=1)
    variable[objcount++]='.';
    objlen--;
    pac++;
    }
    }
        else if (command==SNMP_GET)
    {
    pac+=*pac;
    pac++;
    }
        tmp=pac;
    tmp++;
    if (*tmp>128)
    {
    int lByte;
    int hByte;
    int lenlen=(*tmp)&0x7f;
    u_char* lbit;
    lbit=++tmp;
    if (*lbit>128)
    {
    hByte=1<<(lenlen*8);
    lByte=*lbit&0x7f;
    }
    else 
    hByte=0; for (int c=1;c<lenlen;c++)
    {
    lByte+=lByte<<8;
    lbit++;
    lByte=*lbit;
    }
    rLen=lByte+hByte;
    TRACE("%d\n",rLen);
    tmp+=lenlen-1;
    }
    else
    rLen=*tmp; //结果变量长度
    tmp++;
    GetVarType(pac);
    switch(*pac)  //*pac为变量类型 
    {
    case ASN_SEQ:
    break;
    case ASN_OCTSTR:
    ASN2str(tmp,rLen);
    break;
    case ASN_NULL:
            ASN2null();
    break;
    case ASN_OBJID:
    ASN2oid(pac,rLen);
    break;
    case ASN_IPADDR:
    break;
    case ASN_COUNTER32://可能大于四字节
    ASN2int64(tmp,rLen);
    break;
    case ASN_INT:      //四字节以内
    case ASN_GAUGE:
    ASN2int(tmp,rLen);
    break;
    case ASN_TIMETICKS:
    ASN2time(tmp,rLen);
    break;
    }}void CSnmpMan::Init(char *community, char *variable, int command)
    {

    for (int i=0;i<32;i++)
    this->community[i]=community[i];
    for (i=0;i<VAR_LEN;i++)
    this->variable [i]=variable[i];
    this->command=command;
    }void CSnmpMan::ASN2int(u_char *pack, int len)
    {
        int Low;
    // __int64 counter;
    u_char Hi;
        int tlen;
        char buf[128];
    for (int i=0;i<256;i++)
    result[i]='\0'; tlen=len;
    Low=*pack&0x7f;   //01111111 取出低字节
        Hi=*pack&0x80 ;   //10000000 取出高字节 for (tlen--,pack++;tlen>0;tlen --,pack++)
    Low=(Low<<8)|(int)*pack;
    // TRACE("%d,%d\n",Low,Hi);
    if (Hi)
    Low-=(1<<((len*8)-1));
    bitResult=Low;
    _itoa(bitResult,result,10);
    TRACE("%s\n",result);
    // packet[1000]='\0';
    }void CSnmpMan::ASN2int64(u_char *pack, int len)
    {
        __int64 Low;
    // __int64 counter;
    u_char Hi;
        int tlen;
        char buf[128];
    for (int i=0;i<256;i++)
    result[i]='\0'; tlen=len;
    Low=*pack&0x7f;   //01111111 取出低字节
        Hi=*pack&0x80 ;   //10000000 取出高字节 for (tlen--,pack++;tlen>0;tlen --,pack++)
    Low=(Low<<8)|(int)*pack;
    // TRACE("%d,%d\n",Low,Hi);
    if (Hi)
    Low-=(1<<((len*8)-1));
    counterResult=Low;
    _i64toa(counterResult,result,10);
    TRACE("%s\n",result);
    }void CSnmpMan::ASN2str(u_char *pack, int len)
    {
       for (int i=0;i<256;i++)
    result[i]='\0';
    for (i=0;i<len;i++)
    result[i]=*pack++;
        if (result[0]=='\0')
    ASN2null();
    //    TRACE("%s,%d\n",result,len);  
    // result[200]='a';
    }void CSnmpMan::ASN2null()
    {
        result[0]='n';
    result[1]='u';
    result[2]='l';
    result[3]='l';
    result[4]='\0';}void CSnmpMan::GetVarType(u_char *pack)
    {
    switch(*pack)  //*pac为变量类型 
    {
    case ASN_SEQ:
    varType="Sequence";
    break;
    case ASN_OCTSTR:
    varType="OctetString";
    break;
    case ASN_NULL:
    varType="Null";
    break;
    case ASN_OBJID:
    varType="ObjectId";
    break;
    case ASN_IPADDR:
    varType="IP Address";
    break;
    case ASN_COUNTER32:
    varType="Counter32";
    break;
    case ASN_INT:      
    varType="Integer";
    break;
    case ASN_GAUGE:
    varType="Gauge";
    break;
    case ASN_TIMETICKS:
    varType="TimeTicks";
    break;
    }
    }void CSnmpMan::ASN2oid(u_char *pack, int len)
    {
    int i=0;
    result[i++]='1';
    result[i++]='.';
    result[i++]='3';
    result[i++]='.';
    pack++;
    pack++;
    pack++;
    while(len)
    {
    if(*pack<10) 
    result[i++]=*pack+48;
    else
    if(*pack<100) 
    {
    result[i++]=*pack/10+48;
    result[i++]=*pack%10+48;
    }
    else 
    {
    result[i++]=*pack/100+48;
    result[i++]=(*pack%100)/10+48;
    result[i++]=(*pack%100)%10+48;
    }
    if(len!=1)
    result[i++]='.';
    len--;
    pack++;
    }
    result[i]='\0';
    }void CSnmpMan::ASN2time(u_char *pack, int len)
    {
        int Low;
    int day,hour,min,sec,msec;
    char dayStr[4];
    char hourStr[4];
    char minStr[4];
    char secStr[4];
    char msecStr[4];
    u_char Hi;
        int tlen;
        char buf[128];
    for (int i=0;i<256;i++)
    result[i]='\0'; for (i=0;i<4;i++)
    {
    dayStr[i]='\0';
    hourStr[i]='\0';
    minStr[i]='\0';
    secStr[i]='\0';
    msecStr[i]='\0';
    }
    tlen=len;
    Low=*pack&0x7f;   //01111111 取出低字节
        Hi=*pack&0x80 ;   //10000000 取出高字节 for (tlen--,pack++;tlen>0;tlen --,pack++)
    Low=(Low<<8)|(int)*pack;
    if (Hi)
    Low-=(1<<((len*8)-1));    msec=Low%100;
    Low=Low/100;
    sec=Low%60;
    Low=Low/60;
    min=Low%60;
    Low=Low/60;
    hour=Low%60;
    day=Low/60; _itoa(msec,msecStr,10);
    _itoa(sec,secStr,10);
    _itoa(min,minStr,10);
    _itoa(hour,hourStr,10);
    _itoa(day,dayStr,10); strcat(result,dayStr);
    strcat(result," 天 ");
    strcat(result,hourStr);
    strcat(result," 小时 ");
    strcat(result,minStr);
    strcat(result," 分钟 ");
    strcat(result,secStr);
    strcat(result," 秒 ");
    strcat(result,msecStr);
    strcat(result," 毫秒 "); TRACE("%s\n",result);
    }
      

  11.   

    请查找snmp++或者agent++
    http://www.fock.de/agent++/在snmp网管协约中有两侧:Manager侧和Agent侧。其中Agent侧是指被管对象的代理,比如交换机等设备上的网管;
    Manager侧是指网管工作站,可以编程实现snmp协约对被管设备
    进行管理,可以选用HP提供的snmp++软件包,免费并且提供源代码,
    而且是for VC++.你所说的编程主要指的是Manager侧的编程,snmp++足够了。另外,你还必须知道被管设备的MIB库结构及内容!!!chat* luck true