如何编程获得远程计算机的网卡的MAC地址?

解决方案 »

  1.   

    NETBIOS是可以获得本机MAC地址,远程计算机能行吗?
      

  2.   

    用NETBIOS得本机MAC地址,远程计算机能行吗?
      

  3.   

    搜“winpcap驱动” 它是一个可以在windows平台发送接收arp包的驱动。
    不过有点烦哦!!!!!
      

  4.   

    你可以自己处理Ethernet的数据帧,其格式为:
    [目标地址6byte] 
    [源地址  6byte]
    [协议类型2byte] 标识为 arp rarp ip 和其他
    [数据.........]记得要用网络字节序!~~~~
    只要自己接收一个数据帧,你就可以知道你想要的任何东西了。
    不过我写的那段程序是裸机下写的,所以请不要问我如何在Windows下处理以太帧
      

  5.   

    对了,要获取windows下的以太帧应该用网卡驱动提供的api
      

  6.   

    其实你可以自己发一个ICMP包,它是一个广播包,获取底层网卡驱动以后,在Win9x还要用到NDIS技术,Win2K下不需要,再接收反馈的包就行了!
      

  7.   

    用arp/rarp
    但如果需要通过路由器访问远程主机的话,是不能达到远程主机的mac的,得到的只是路由器的mac
      

  8.   

    typedef struct _ASTAT_
    {
    ADAPTER_STATUS adapt;
    NAME_BUFFER    NameBuff[30];
    } ASTAT, * PASTAT;
      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]);
      }
    Load:netapi32.lib