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);
|
|||
|
}
|