怎么获取网络连接的名称?这个问题我找了两天才发现,用GetIfTable无法获取名称,得用GetAdaptersAddresses(), 这个函数可以获取网卡adapter相关联的网络连接的信息。
int WIN_GetAdapterAddress(WIN_AdapterAddressTable& tbl)
{
ULONG outBufLen = 0;
ULONG flags = GAA_FLAG_INCLUDE_PREFIX | GAA_FLAG_SKIP_ANYCAST |GAA_FLAG_SKIP_DNS_SERVER
|GAA_FLAG_SKIP_MULTICAST|GAA_FLAG_SKIP_UNICAST;
PIP_ADAPTER_ADDRESSES pAddresses = NULL;
if (GetAdaptersAddresses(AF_INET, flags, NULL, NULL, &outBufLen) == ERROR_BUFFER_OVERFLOW)
{
pAddresses = (PIP_ADAPTER_ADDRESSES) malloc(outBufLen);
if(!pAddresses) return -1;
}
if(GetAdaptersAddresses(AF_INET, flags, NULL, pAddresses, &outBufLen) != NO_ERROR)
{
free(pAddresses);
return -1;
}
while(pAddresses)
{
WIN_AdapterAddress addr;
addr.nIfIndex = pAddresses->IfIndex;
addr.strAdapterName = pAddresses->AdapterName;
WIN_StrW2A(pAddresses->FriendlyName, addr.strFriendlyName);
WIN_StrW2A(pAddresses->Description, addr.strDescr);
tbl.push_back(addr);
// 下一个
pAddresses = pAddresses->Next;
}
free(pAddresses);
return 0;
}