Roger571
Известный
- 58
- 31
Да, был невнимателен.В примере вроде похожее имя адаптера?
Посмотреть вложение 37053
В общем, если кому вдруг пригодится, на новых системах нужно использовать GetAdaptersAddresses(), который содержит поле FriendlyName. Он то и содержит читаемое имя адаптера. Источник.
Рабочий код:
C++:
#include <WS2tcpip.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
PIP_ADAPTER_ADDRESSES pAdapterAdresses = NULL;
ULONG ulOutBufLen = 0x1000;
DWORD dwRetVal;
char buff[0x10], adapterName[0x20], desc[0x20];
pAdapterAdresses = (IP_ADAPTER_ADDRESSES *)malloc(ulOutBufLen);
ulOutBufLen = sizeof(IP_ADAPTER_INFO);
if (GetAdaptersAddresses(AF_INET, GAA_FLAG_INCLUDE_PREFIX, NULL, pAdapterAdresses, &ulOutBufLen) != ERROR_SUCCESS)
{
free(pAdapterAdresses);
pAdapterAdresses = (IP_ADAPTER_ADDRESSES *)malloc(ulOutBufLen);
}
if ((dwRetVal = GetAdaptersAddresses(AF_INET, GAA_FLAG_INCLUDE_PREFIX, NULL, pAdapterAdresses, &ulOutBufLen)) != ERROR_SUCCESS)
{
free(pAdapterAdresses);
}
PIP_ADAPTER_ADDRESSES pAdapter = pAdapterAdresses;
while (pAdapter)
{
wcstombs(adapterName, pAdapter->FriendlyName, wcslen(pAdapter->FriendlyName));
wcstombs(desc, pAdapter->Description, wcslen(pAdapter->Description));
printf("Adapter Name: %s %s\n", adapterName, desc);
if (pAdapter->FirstUnicastAddress->Address.lpSockaddr->sa_family == AF_INET)
{
sockaddr_in *sa_in = (sockaddr_in *)pAdapter->FirstUnicastAddress->Address.lpSockaddr;
printf("IP Address: %s\n", inet_ntop(AF_INET, &(sa_in->sin_addr), buff, 0x10));
}
pAdapter = pAdapter->Next;
}
if (pAdapterAdresses)
free(pAdapterAdresses);
system("pause");
return 0;
}
Это описание сетевого адаптера, указывается имя железа.