60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
#include <winsock2.h>
|
|
#include <ws2ipdef.h>
|
|
#include <iphlpapi.h>
|
|
#include <cstdio>
|
|
|
|
#pragma comment(lib, "iphlpapi.lib")
|
|
|
|
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
|
|
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
|
|
|
|
/* Note: could also use malloc() and free() */
|
|
|
|
int GetInterface()
|
|
{
|
|
|
|
// Declare and initialize variables
|
|
PIP_INTERFACE_INFO pInfo = NULL;
|
|
ULONG ulOutBufLen = 0;
|
|
|
|
DWORD dwRetVal = 0;
|
|
int iReturn = 1;
|
|
|
|
int i;
|
|
|
|
// Make an initial call to GetInterfaceInfo to get
|
|
// the necessary size in the ulOutBufLen variable
|
|
dwRetVal = GetInterfaceInfo(NULL, &ulOutBufLen);
|
|
if (dwRetVal == ERROR_INSUFFICIENT_BUFFER) {
|
|
pInfo = (IP_INTERFACE_INFO *) MALLOC(ulOutBufLen);
|
|
if (pInfo == NULL) {
|
|
printf
|
|
("Unable to allocate memory needed to call GetInterfaceInfo\n");
|
|
return 1;
|
|
}
|
|
}
|
|
// Make a second call to GetInterfaceInfo to get
|
|
// the actual data we need
|
|
dwRetVal = GetInterfaceInfo(pInfo, &ulOutBufLen);
|
|
if (dwRetVal == NO_ERROR) {
|
|
printf("Number of Adapters: %ld\n\n", pInfo->NumAdapters);
|
|
for (i = 0; i < pInfo->NumAdapters; i++) {
|
|
printf("Adapter Index[%d]: %ld\n", i,
|
|
pInfo->Adapter[i].Index);
|
|
printf("Adapter Name[%d]: %ws\n\n", i,
|
|
pInfo->Adapter[i].Name);
|
|
}
|
|
iReturn = 0;
|
|
} else if (dwRetVal == ERROR_NO_DATA) {
|
|
printf
|
|
("There are no network adapters with IPv4 enabled on the local system\n");
|
|
iReturn = 0;
|
|
} else {
|
|
printf("GetInterfaceInfo failed with error: %d\n", dwRetVal);
|
|
iReturn = 1;
|
|
}
|
|
|
|
FREE(pInfo);
|
|
return (iReturn);
|
|
}
|