前者如使用命令行程序nbtstat -a 所作的?后者如各机器上的共享文件夹之类?谢谢

解决方案 »

  1.   

    CString CGetMACDlg::GetMacAddress(CString sNetBiosName/*網絡上的電腦名稱*/)
    {
        ASTAT Adapter;
        NCB ncb;
        UCHAR uRetCode;
        
        memset(&ncb, 0, sizeof(ncb));
        ncb.ncb_command = NCBRESET;
        ncb.ncb_lana_num = 0;
        uRetCode = Netbios(&ncb);
        memset(&ncb, 0, sizeof(ncb));
        ncb.ncb_command = NCBASTAT;
        ncb.ncb_lana_num = 0;
        sNetBiosName.MakeUpper();
        FillMemory(ncb.ncb_callname, NCBNAMSZ - 1, 0x20);
        strcpy((char *)ncb.ncb_callname, (LPCTSTR) sNetBiosName);
        ncb.ncb_callname[sNetBiosName.GetLength()] = 0x20;
        ncb.ncb_callname[NCBNAMSZ] = 0x0;
        ncb.ncb_buffer = (unsigned char *) &Adapter;
        ncb.ncb_length = sizeof(Adapter);
        uRetCode = Netbios(&ncb);
        CString sMacAddress;
        if (uRetCode == 0)
        {
            sMacAddress.Format(_T("%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]);
        }    
        return sMacAddress;
    }
      

  2.   

    1)第一个问题我这有源码
    #include <iphlpapi.h>BOOL CTestChangeIpDlg::GetMacAddr(const char *dest_ip, char *outbuf, int outlen)
    {
    HRESULT hr;
    ULONG   pulMac[2];
            ULONG   ulLen = 6; //mac addr include 6 bytes  IPAddr  dest_ipAddr;
    dest_ipAddr = inet_addr(dest_ip);
    if(dest_ipAddr == INADDR_NONE)
    return FALSE; memset (pulMac, 0xff, sizeof (pulMac));
    hr = SendARP(dest_ipAddr, 0, pulMac, &ulLen);
    if(hr != NO_ERROR)
    {
    TRACE("GetMacAddr(): SendARP() Error!\n");
    return FALSE;
    }

    size_t i, j;
        char * szMac = new char[ulLen*3];
        PBYTE pbHexMac = (PBYTE) pulMac;
        // Convert the binary MAC address into human-readable
        for (i = 0, j = 0; i < ulLen - 1; ++i) {
            j += sprintf (szMac + j, "%02X:", pbHexMac[i]);
        }    
        j += sprintf (szMac + j, "%02X", pbHexMac[i]);
    if(outlen < (int)strlen(szMac)+1)
    {
    TRACE("GetMacAddr(): no enough buffer size!\n");
    delete[] szMac;
    return FALSE;
    }
    strncpy(outbuf,szMac,strlen(szMac)+1);
        delete[] szMac;    return TRUE;
    }2)NetShareEnum()函数等;具体见MSDN
      

  3.   

    如何编程实现获取远程计算机的mac地址???行吗?楼上同志说的用来获取本机或局域网内的还可以,局域网以外的嘛,本人认为---不可能,理论上不行。在IP包的包头中并没有MAC这一选项,ARP也只对局域网内的机子有用,在广域网上帧中的MAC地址已经经过了N次的转换,最后到达本机的帧里的MAC地址是最后一次转换后的MAC,一般也就是你的网关或服务器的MAC了。在局域网内可以通过RAP和RARP得到某主机的MAC,正如楼上所说的,在广域网上做不到!
      

  4.   

    如何编程实现获取远程计算机的mac地址???行吗?楼上同志说的用来获取本机或局域网内的还可以,局域网以外的嘛,本人认为---不可能,理论上不行。在IP包的包头中并没有MAC这一选项,ARP也只对局域网内的机子有用,在广域网上帧中的MAC地址已经经过了N次的转换,最后到达本机的帧里的MAC地址是最后一次转换后的MAC,一般也就是你的网关或服务器的MAC了。在局域网内可以通过RAP和RARP得到某主机的MAC,正如楼上所说的,在广域网上做不到!
      

  5.   

    楼上的老兄你的ASTAT结构是在哪个头文件定义的
    我这里根本找不到哦