Alberto,
You need to enumerate the data from GetAdaptersInfo to get the information.
Gemini shows the following when asking
Code:
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "iphlpapi.lib")
int main() {
// Initialize Winsock
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("WSAStartup failed.\n");
return 1;
}
// Get local IP addresses
PIP_ADAPTER_INFO AdapterInfo;
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
AdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
if (AdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
WSACleanup();
return 1;
}
// Make an initial call to GetAdaptersInfo to get the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo(AdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
free(AdapterInfo);
AdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
if (AdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
WSACleanup();
return 1;
}
}
if (GetAdaptersInfo(AdapterInfo, &ulOutBufLen) == NO_ERROR) {
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
while (pAdapterInfo) {
PIP_ADDR_STRING pAddrString = &pAdapterInfo->IpAddressList;
while (pAddrString) {
if (pAddrString->IpAddress.String[0] != '1' ||
pAddrString->IpAddress.String[1] != '2' ||
pAddrString->IpAddress.String[2] != '7' ||
pAddrString->IpAddress.String[3] != '.') { // Exclude loopback addresses
printf("IP Address: %s\n", pAddrString->IpAddress.String);
}
pAddrString = pAddrString->Next;
}
pAdapterInfo = pAdapterInfo->Next;
}
} else {
printf("Call to GetAdaptersInfo failed.\n");
}
free(AdapterInfo);
WSACleanup();
return 0;
}
that is not DataFlex code but it gives you an idea of how to get it.