nbtstat -A 192.168.xxx.xxx
注意大小写

解决方案 »

  1.   

    ---摘抄---获得MAC可以这样
    CString GetLocalMacAdd()
    {
        CString sMacNumber;
        sMacNumber = "unknowuser00";
        ASTAT Adapter;
        NCB Ncb;
        UCHAR uRetCode;
        //char NetName[50];
        LANA_ENUM  lenum;
        int      i;
        memset( &Ncb, 0, sizeof(Ncb) );
        Ncb.ncb_command = NCBENUM;
        Ncb.ncb_buffer = (UCHAR *)&lenum;
        Ncb.ncb_length = sizeof(lenum);
        uRetCode = Netbios( &Ncb );
        for(i=0; i < lenum.length ;i++)
        {
            memset( &Ncb, 0, sizeof(Ncb) );
            Ncb.ncb_command = NCBRESET;
            Ncb.ncb_lana_num = lenum.lana[i];
            uRetCode = Netbios( &Ncb );                          
            memset( &Ncb, 0, sizeof (Ncb) );
            Ncb.ncb_command = NCBASTAT;
            Ncb.ncb_lana_num = lenum.lana[i];
            strcpy( (char *)Ncb.ncb_callname,  "*              " );
            Ncb.ncb_buffer = (unsigned char *) &Adapter;
            Ncb.ncb_length = sizeof(Adapter);
            uRetCode = Netbios( &Ncb );
            if ( uRetCode == 0 )
            {
                if (Adapter.adapt.adapter_address[0]+
                    Adapter.adapt.adapter_address[1]+
                    Adapter.adapt.adapter_address[2]+
                    Adapter.adapt.adapter_address[3]+
                    Adapter.adapt.adapter_address[4]+
                    Adapter.adapt.adapter_address[5]!=0)
                {                sMacNumber.Format("%02x%02x%02x%02x%02x%02x",
                    Adapter.adapt.adapter_address[0],
                    Adapter.adapt.adapter_address[1],
                    Adapter.adapt.adapter_address[2],
                    Adapter.adapt.adapter_address[3],
                    Adapter.adapt.adapter_address[4],
                    Adapter.adapt.adapter_address[5] );
                    break;
                }
            }
        }
        return sMacNumber;
    }   
      

  2.   

    使用下面这段代码可以得到本机的ARP表,其中存有最近和你连系过的所有机子的MAC,若要取得某IP的MAC,可以先和其连系一下,比如Ping一下,否则其MAC可能不在ARP表中。
    PMIB_IPNETTABLE pIpNetTable;
    HMODULE hModule;
    CString str,strTemp;
    typedef DWORD (CALLBACK* GETIPNETTABLE)(PMIB_IPNETTABLE,PULONG,BOOL);
    GETIPNETTABLE GetARP;
    DWORD dwSize;
    int i,j,ret;hModule=LoadLibrary("IPhlpapi.DLL"); //使用IPHlper函数,动态连接。
    //本函数作用是得到ARP表
    GetARP=(GETIPNETTABLE)GetProcAddress(hModule,"GetIpNetTable");
    if(GetARP!=NULL){
        dwSize=0;
        pIpNetTable=NULL;
        ret=(*GetARP)(pIpNetTable,&dwSize,0);
        if(ret==ERROR_INSUFFICIENT_BUFFER){
           pIpNetTable=(PMIB_IPNETTABLE)malloc(dwSize);
           (*GetARP)(pIpNetTable,&dwSize,0);
           for(i=0;i<pIpNetTable->dwNumEntries;i++){//得到全部条目
               addr.s_addr =pIpNetTable->table [i].dwAddr;
               strTemp=inet_ntoa (addr);//IP地址
               str+=strTemp;
               str+=" --- ";
               //MAC
               for(j=0;j<pIpNetTable->table [i].dwPhysAddrLen-1 ;j++){
                   strTemp.Format ("%X-",(BYTE)pIpNetTable->table [i].bPhysAddr[j]);
                   str+=strTemp;
               }
               strTemp.Format ("%X",(BYTE)pIpNetTable->table [i].bPhysAddr [j]);
               str+=strTemp;
               str+="\r\n";
           }//End of for
        }//End of if
     }//End of if
    FreeLibrary(hModule);
      

  3.   

    一点补充:
    #include "Iprtrmib.h"
    #include "Iptypes.h."
      

  4.   

    谢谢大家的解答。谢谢。
    To:allanic(阿伦)
        能不能告诉我在VC中如何调用nbtstat命令,及如何取得它的返回结果?谢谢。
    To:prog_st(st) 
        你提供的函数应该是只能得到本机的MAC地址吧?不知如何得到其他机器的MAC地址(在VC中)?
      

  5.   

    得到其它机器的MAC必须要得到ARP表,即利用IP助手函数GetIpNetTable。IP助手函数可以编写出类似Ipconfig、Netstat(取得TCP UDP监听者表及IP协议统计情况)、Route(处理网络路由表)以及Arp(显示并修改供地址解析协议”(ARP)使用的IP到物理地址翻译表)等的程序。