正常的情况下:取mac地址是在HDEY_LOCAL_MOCHINE\System\CurrentControlSet\Services\VxD\MSTCP子键和HDEY_LOCAL_MOCHINE\System\CurrentControlSet\Services\Class\Net子键下读取有关信息,对吧?
为了按NetBios的方法取mac地址,我在网上邻居->属性中安装了NetBEUI,但是HDEY_LOCAL_MOCHINE\System\CurrentControlSet\Services\VxD\MSTCP子键下只有一个Hostname键,HDEY_LOCAL_MOCHINE\System\CurrentControlSet\Services\下没有Class目录,这是为什么呢?

解决方案 »

  1.   

    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    #include <string>using namespace std;
    #define bzero(thing,sz) memset(thing,0,sz)bool getadapterinfo(int adapter_num, string &mac_addr)
    {
      // 重置网卡,以便我们可以查询
      ncb ncb;
      memset(&ncb, 0, sizeof(ncb));
      ncb.ncb_command = ncbreset;
      ncb.ncb_lana_num = adapter_num;
      if (netbios(&ncb) != nrc_goodret) {
        mac_addr = "bad (ncbreset): ";
        mac_addr += string(ncb.ncb_retcode);
        return false;
      }  // 准备取得接口卡的状态块
      bzero(&ncb,sizeof(ncb);
      ncb.ncb_command = ncbastat;
      ncb.ncb_lana_num = adapter_num;
      strcpy((char *) ncb.ncb_callname, "*");
      struct astat
      {
        adapter_status adapt;
        name_buffer namebuff[30];
      } adapter;
      bzero(&adapter,sizeof(adapter));
      ncb.ncb_buffer = (unsigned char *)&adapter;
      ncb.ncb_length = sizeof(adapter);  // 取得网卡的信息,并且如果网卡正常工作的话,返回标准的冒号分隔格式。
      if (netbios(&ncb) == 0)
      {
        char acmac[18];
        sprintf(acmac, "%02x:%02x:%02x:%02x:%02x:%02x",
                int (adapter.adapt.adapter_address[0]),
                int (adapter.adapt.adapter_address[1]),
                int (adapter.adapt.adapter_address[2]),
                int (adapter.adapt.adapter_address[3]),
                int (adapter.adapt.adapter_address[4]),
                int (adapter.adapt.adapter_address[5]));
        mac_addr = acmac;
        return true;
      }
      else
      {
        mac_addr = "bad (ncbastat): ";
        mac_addr += string(ncb.ncb_retcode);
        return false;
      }
    }int main()
    {
      // 取得网卡列表
      lana_enum adapterlist;
      ncb ncb;
      memset(&ncb, 0, sizeof(ncb));
      ncb.ncb_command = ncbenum;
      ncb.ncb_buffer = (unsigned char *)&adapterlist;
      ncb.ncb_length = sizeof(adapterlist);
      netbios(&ncb);  // 取得本地以太网卡的地址
      string mac_addr;
      for (int i = 0; i < adapterlist.length - 1; ++i)
      {
        if (getadapterinfo(adapterlist.lana[i], mac_addr))
        {
          cout << "adapter " << int (adapterlist.lana[i]) <<
                  "'s mac is " << mac_addr << endl;
        }
        else
        {
          cerr << "failed to get mac address! do you" << endl;
          cerr << "have the netbios protocol installed?" << endl;
          break;
        }
      }  return 0;
    }
      

  2.   

    1、SendARP()函数 
    2、NetBios协议
    但是怎样得到远程主机的MAC地址,困惑。
    如果需要原代码,给我发短信。
                            -------------------------------------------------
                                         为了得到我应该得到的
                                         为了找回我曾经失去的