다음을 통해 공유


GetIpInterfaceTable 함수(netioapi.h)

GetIpInterfaceTable 함수는 로컬 컴퓨터에서 IP 인터페이스 항목을 검색합니다.

구문

IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpInterfaceTable(
  [in]  ADDRESS_FAMILY         Family,
  [out] PMIB_IPINTERFACE_TABLE *Table
);

매개 변수

[in] Family

검색할 IP 인터페이스의 주소 패밀리입니다.

주소 패밀리에 사용할 수 있는 값은 Winsock2.h 헤더 파일에 나열됩니다. AF_ 주소 패밀리 및 PF_ 프로토콜 패밀리 상수의 값은 동일하므로(예: AF_INETPF_INET) 두 상수를 모두 사용할 수 있습니다.

Windows Vista 이상 및 Windows SDK 헤더 파일의 organization 변경되었으며 이 멤버에 대한 가능한 값은 Ws2def.h 헤더 파일에 정의됩니다. Ws2def.h 헤더 파일은 Winsock2.h에 자동으로 포함되며 직접 사용하면 안 됩니다.

현재 지원되는 값은 AF_INET, AF_INET6AF_UNSPEC.

의미
AF_UNSPEC
0
주소 패밀리는 지정되지 않습니다. 이 매개 변수를 지정하면 GetIpInterfaceTable 함수는 IPv4 및 IPv6 항목이 모두 포함된 IP 인터페이스 테이블을 반환합니다.
AF_INET
2
IPv4(인터넷 프로토콜 버전 4) 주소 패밀리입니다.
AF_INET6
23
IPv6(인터넷 프로토콜 버전 6) 주소 패밀리입니다.

[out] Table

MIB_IPINTERFACE_TABLE 구조에서 IP 인터페이스 항목의 테이블을 수신하는 버퍼에 대한 포인터입니다.

반환 값

함수가 성공하면 반환 값이 NO_ERROR.

함수가 실패하면 반환 값은 다음 오류 코드 중 하나입니다.

반환 코드 설명
ERROR_INVALID_PARAMETER
잘못된 매개 변수가 함수에 전달되었습니다. 이 오류는 Table 매개 변수에 NULL 포인터가 전달되거나 Family 매개 변수가 AF_INET, AF_INET6 또는 AF_UNSPEC 지정되지 않은 경우 반환됩니다.
ERROR_NOT_ENOUGH_MEMORY
메모리 리소스가 부족하여 작업을 완료할 수 있습니다.
ERROR_NOT_FOUND
Family 매개 변수에 지정된 IP 인터페이스 항목을 찾을 수 없습니다.
ERROR_NOT_SUPPORTED
함수는 지원되지 않습니다. 이 오류는 Address 매개 변수에 지정된 IP 전송이 로컬 컴퓨터에 구성되지 않은 경우 반환됩니다. 이 오류는 이 함수가 지원되지 않는 Windows 버전에서도 반환됩니다.
기타
FormatMessage 함수를 사용하여 반환된 오류에 대한 메시지 문자열을 가져옵니다.

설명

GetIpInterfaceTable 함수는 Windows Vista 이상에서 정의됩니다.

The
GetIpInterfaceTable 함수는 로컬 시스템의 IP 인터페이스를 열거하고 이 정보를 MIB_IPINTERFACE_TABLE 구조로 반환합니다.

IP 인터페이스 항목은 Table 매개 변수가 가리키는 버퍼의 MIB_IPINTERFACE_TABLE 구조로 반환됩니다. MIB_IPINTERFACE_TABLE 구조에는 IP 인터페이스 항목 수와 각 IP 인터페이스 항목에 대한 MIB_IPINTERFACE_ROW 구조의 배열이 포함됩니다. 이러한 반환된 구조체가 더 이상 필요하지 않은 경우 FreeMibTable을 호출하여 메모리를 해제합니다.

Family 매개 변수는 AF_INET 또는 AF_INET6 초기화해야 합니다.

Table 매개 변수가 가리키는 반환된 MIB_IPINTERFACE_TABLE 구조체에는 NumEntries 멤버와 MIB_IPINTERFACE_TABLE 구조체Table 멤버에 있는 첫 번째 MIB_IPINTERFACE_ROW 배열 항목 간의 맞춤을 위한 안쪽 여백이 포함될 수 있습니다. 맞춤을 위한 안쪽 여백은 MIB_IPINTERFACE_ROW 배열 항목 사이에도 있을 수 있습니다. MIB_IPINTERFACE_ROW 배열 항목에 대한 액세스는 패딩이 있을 수 있다고 가정해야 합니다.

예제

다음 예제에서는 IP 인터페이스 테이블을 검색한 다음 테이블에 있는 IP 인터페이스 항목의 몇 멤버 값을 출력합니다.

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <winsock2.h>
#include <ws2ipdef.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib, "iphlpapi.lib")

int main()
{
    // Declare and initialize variables

    int i;

    DWORD dwRetVal = 0;

    PMIB_IPINTERFACE_TABLE pipTable = NULL;

    dwRetVal = GetIpInterfaceTable(AF_UNSPEC, &pipTable);
    if (dwRetVal != NO_ERROR) {
        printf("GetIpInterfaceTable returned error: %ld\n", dwRetVal);
        exit(1);
    }
    // Print some variables from the rows in the table
    printf("Number of table entries: %d\n\n", pipTable->NumEntries);

    for (i = 0; i < (int) pipTable->NumEntries; i++) {
        printf("Address Family[%d]:\t\t", i);
        switch (pipTable->Table[i].Family) {
        case AF_INET:
            printf("IPv4\n");
            break;
        case AF_INET6:
            printf("IPv6\n");
            break;
        default:
            printf("Other: %d\n", pipTable->Table[i].Family);
            break;
        }

        printf("Interface LUID NetLuidIndex[%d]:\t %lu\n",
               i, pipTable->Table[i].InterfaceLuid.Info.NetLuidIndex);

        printf("Interface LUID IfType[%d]:\t ", i);
        switch (pipTable->Table[i].InterfaceLuid.Info.IfType) {
        case IF_TYPE_OTHER:
            printf("Other\n");
            break;
        case IF_TYPE_ETHERNET_CSMACD:
            printf("Ethernet\n");
            break;
        case IF_TYPE_ISO88025_TOKENRING:
            printf("Token ring\n");
            break;
        case IF_TYPE_PPP:
            printf("PPP\n");
            break;
        case IF_TYPE_SOFTWARE_LOOPBACK:
            printf("Software loopback\n");
            break;
        case IF_TYPE_ATM:
            printf("ATM\n");
            break;
        case IF_TYPE_IEEE80211:
            printf("802.11 wireless\n");
            break;
        case IF_TYPE_TUNNEL:
            printf("Tunnel encapsulation\n");
            break;
        case IF_TYPE_IEEE1394:
            printf("IEEE 1394 (Firewire)\n");
            break;
        default:
            printf("Unknown: %d\n",
                   pipTable->Table[i].InterfaceLuid.Info.IfType);
            break;
        }
        printf("Interface Index[%d]:\t\t %lu\n",
               i, pipTable->Table[i].InterfaceIndex);
        printf("Maximum reassembly size[%d]:\t %lu\n", i,
               pipTable->Table[i].MaxReassemblySize);

        printf("Advertising enabled[%d]:\t\t ", i);
        if (pipTable->Table[i].AdvertisingEnabled)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Forwarding enabled[%d]:\t\t ", i);
        if (pipTable->Table[i].ForwardingEnabled)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Network layer MTU[%d]:\t\t %lu\n", i, pipTable->Table[i].NlMtu);

        printf("Connected[%d]:\t\t\t ", i);
        if (pipTable->Table[i].Connected)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports wakeup patterns[%d]:\t ", i);
        if (pipTable->Table[i].SupportsWakeUpPatterns)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports neighbor discovery[%d]:\t ", i);
        if (pipTable->Table[i].SupportsNeighborDiscovery)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports router discovery[%d]:\t ", i);
        if (pipTable->Table[i].SupportsRouterDiscovery)
            printf("Yes\n");
        else
            printf("No\n");

        printf("\n");
    }

    FreeMibTable(pipTable);
    pipTable = NULL;

    exit(0);
}


요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 netioapi.h(Iphlpapi.h 포함)
라이브러리 Iphlpapi.lib
DLL Iphlpapi.dll

추가 정보

FreeMibTable

GetIfEntry2

GetIfStackTable

GetIfTable2

GetInvertedIfStackTable

GetIpInterfaceEntry

IP 도우미 함수 참조

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange