windows获取网卡列表

用的是GetAdaptersInfo()函数。Windows API的这些函数,有一个共同点。一般都是先传入一个NULL指针,此时函数返回一个长度值,告诉你需要申请多大的空间才够用。然后再new一个这么大的空间,去获取有效的值。


int WIN_GetAdapter(WIN_AdapterList& adapters)
{
 IP_ADAPTER_INFO* pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO) );
 ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);

 // Make an initial call to GetAdaptersInfo to get the necessary size into the ulOutBufLen variable
 if (GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
 {
  free(pAdapterInfo);
  pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
 }

 if(::GetAdaptersInfo(pAdapterInfo,&ulOutBufLen) == ERROR_SUCCESS)
 {
  IP_ADAPTER_INFO* p = pAdapterInfo;
  while(p)
  {
   WIN_Adapter na;

   memcpy(na.mac, p->Address, 6);  // MAC地址
   strcpy(na.name,  p->AdapterName);
   strcpy(na.description, p->Description);
   strcpy(na.ip, p->IpAddressList.IpAddress.String);
   strcpy(na.mask, p->IpAddressList.IpMask.String);
   strcpy(na.gateway, p->GatewayList.IpAddress.String);

   adapters.push_back(na);

   p = p->Next;
  }
 }

 free(pAdapterInfo);
 return 0;
}

转载自:http://blog.sina.com.cn/s/blog_8cfe05150100xd0v.html

你可能感兴趣的:(运维)