用Netbios可以得到MAC地址,但必须要安装NetBEUI协议才行,如果机器只安装了TCP/IP协议,怎么得到MAC地址?不要告诉我去读注册表。

解决方案 »

  1.   

    IPHelper 可以得到MAC,不过要装平台SDK,自已定义头文件,用动态调用也行,IPhlpapi.DLL 98就有了。在MSDN里搜一下GetAdaptersInfo(得到本机的)和GetIpNetTable(得到缓冲区中其它计算机的)试试。这个论坛有相关代码,搜搜看。
      

  2.   

    谢谢iamshuke!还有别的办法吗?
      

  3.   

    运行命令
    ipconfig/all
    就可以看到mac地址
      

  4.   

    使用注册表:
    Win2000:
    1.在“HKEY_LOCAL_MACHINE\SYS
    TEM\CurrentControlSet\Control\Class\4D36
    
    E972-E325-11CE-BFC1-08002BE10318\0000、0001、0002”等主键下, 因为你有可能安装了不止一块网卡,所以在这个主键下可能会有多个类似于“0000、0001”的主键,这时候你可以查找DriverDesc内容为你要修改的网卡的描述相吻合的主键,如“0000”。
    
    2.在上面提到的主键下,添一个字符串,名字为“NetworkAddress”,把它的值设为你要的MAC地址,要连续写如“001010101010”。
    
    3.然后到主键下“NDI\params”中添加一项“NetworkAddress”的主键值,在该主键下添加名为“default”的字符串,值写要设的MAC地址,要连续写,如“001010101010”。
    
    【注】实际上这只是设置在后面提到的高级属性中的“初始值”,实际使用的MAC地址还是取决于在第2点中提到的“NetworkAddress”参数,而且一旦设置后,以后高级属性中值就是“NetworkAddress”给出的值而非“default”给出的了。
    
    4.在“NetworkAddress”的主键下继续添加名为“ParamDesc”的字符串,其作用为指定“NetworkAddress”主键的描述,其值可为“MAC Address”(也可以随意设置,这只是个描述,无关紧要,这个值将会在你以后直接修改MAC地址的时候作为描述出现),这样重新启动一次以后打开网络邻居的属性,双击相应网卡项会发现有一个高级设置,其下存在MAC Address (就是你在前面设置的ParamDesc,如图(^29041103a^)1)的选项,这就是你在第二步里在注册表中加的新项“NetworkAddress”,以后只要在此修改MAC地址就可以了。
    
    5.关闭注册表编辑器,重新启动,你的网卡地址已经改好了。打开网络邻居的属性,双击相应网卡项会发现有一个MAC Address的高级设置项。用于直接修改MAC地址,而且不需要重新启动就可以实现MAC的随时更改。可以在GooGle里搜索一下"给网卡换张身份证"。
      

  5.   

    另附:我只有TCP/IP协议,为什么就可以用IPCONFIG/all来看IP和MAC。
      

  6.   

    请各位注意一下我的问题,即没装NetBEUI协议,只有TCP/IP协议,也不读注册表,怎么得到MAC地址?
      

  7.   

    这是我在MSDN上抄的(事实上,很多人从那里面抄了这个程序):   #include <windows.h>
       #include <wincon.h>
       #include <stdlib.h>
       #include <stdio.h>
       #include <time.h>   typedef struct _ASTAT_
       {      ADAPTER_STATUS adapt;
          NAME_BUFFER    NameBuff [30];   }ASTAT, * PASTAT;   ASTAT Adapter;   void main (void)
       {
          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 );
          printf( "The NCBENUM return code is: 0x%x \n", uRetCode );      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 );
              printf( "The NCBRESET on LANA %d return code is: 0x%x \n",
                      lenum.lana[i], uRetCode );          memset( &Ncb, 0, sizeof (Ncb) );
              Ncb.ncb_command = NCBASTAT;
              Ncb.ncb_lana_num = lenum.lana[i];          strcpy( Ncb.ncb_callname,  "*               " );
              Ncb.ncb_buffer = (char *) &Adapter;
              Ncb.ncb_length = sizeof(Adapter);          uRetCode = Netbios( &Ncb );
              printf( "The NCBASTAT on LANA %d return code is: 0x%x \n",
                      lenum.lana[i], uRetCode );
              if ( uRetCode == 0 )
              {
                 printf( "The Ethernet Number on LANA %d is:
                         %02x%02x%02x%02x%02x%02x\n",
                lenum.lana[i],
                      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] );
              }
           }   } 注意记得加上下面的语句:
    #pragma comment (lib,"Netapi32.lib")
    或者在Project选项中加上Netapi32.lib库
      

  8.   

    不用装NETBUEI协议
    在VC console中运行一下就可以了具体解释,可以看看MSDN
      

  9.   

    可以通过发送ARP来获取网络中计算机的MAC地址,当然也包括自己的机器。
    自己去MSDN查查这个,我用过这个,绝对可行。
    ARPDWORD SendARP(
      IPAddr DestIP,     // destination IP address
      IPAddr SrcIP,      // IP address of sender
      PULONG pMacAddr,   // returned physical address
      PULONG PhyAddrLen  // length of returned physical addr.
    );
      

  10.   

    IPHelper 可以得到MAC,不过要装平台SDK,使用sendarp函数,具体使用是通过一个ip地址,返回一个mac地址,可以得到局域网内所想知道的主机的mac地址
      

  11.   

       好像除了NETBIOS就只有用IP助手函数了。   关注其他的方法。