Мне нужно определить IP-адрес физической сетевой карты для привязки к сокету, потому что моему приложению нужно связываться только по Ethernet (только по физической сетевой карте).
Я использовал GetAdaptersInfo () чтобы получить список адаптеров и показать информацию об адаптере vEthernet.
Итак, как отличить информацию о физическом адаптере.
Мой код здесь. ( Источник кода )
#include "pch.h"
#include <iostream>
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdlib.h>
#pragma comment(lib, "IPHLPAPI.lib")
#include <Windows.h>
int main()
{
IP_ADAPTER_INFO *pAdapterInfo;
ULONG ulOutBufLen;
DWORD dwRetVal;
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
ulOutBufLen = sizeof(IP_ADAPTER_INFO);
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
}
if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) != ERROR_SUCCESS) {
printf("GetAdaptersInfo call failed with %d\n", dwRetVal);
}
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
while (pAdapter) {
if (pAdapter->Type == MIB_IF_TYPE_ETHERNET)
{
if (pAdapter->DhcpEnabled) {
printf("\tDHCP Enabled: Yes\n");
printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
}
else
printf("\tDHCP Enabled: No\n");
printf("\t***\n");
printf("Adapter Name: %s\n", pAdapter->AdapterName);
printf("Adapter Desc: %s\n", pAdapter->Description);
printf("\tAdapter Addr: \t");
for (UINT i = 0; i < pAdapter->AddressLength; i++) {
if (i == (pAdapter->AddressLength - 1))
printf("%.2X\n", (int)pAdapter->Address[i]);
else
printf("%.2X-", (int)pAdapter->Address[i]);
}
printf("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String);
printf("IP Mask: %s\n", pAdapter->IpAddressList.IpMask.String);
printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
if (pAdapter->Type == MIB_IF_TYPE_ETHERNET)
printf("\tIt's an Ethernet NIC\n");
else if (pAdapter->Type == IF_TYPE_IEEE80211)
printf("\tIt's an Wifi NIC\n");
}
pAdapter = pAdapter->Next;
}
getchar();
}
Спасибо.