다음을 통해 공유


IP_ADAPTER_INFO 구조체(iptypes.h)

IP_ADAPTER_INFO 구조에는 로컬 컴퓨터의 특정 네트워크 어댑터에 대한 정보가 포함됩니다.

구문

typedef struct _IP_ADAPTER_INFO {
  struct _IP_ADAPTER_INFO *Next;
  DWORD                   ComboIndex;
  char                    AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
  char                    Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
  UINT                    AddressLength;
  BYTE                    Address[MAX_ADAPTER_ADDRESS_LENGTH];
  DWORD                   Index;
  UINT                    Type;
  UINT                    DhcpEnabled;
  PIP_ADDR_STRING         CurrentIpAddress;
  IP_ADDR_STRING          IpAddressList;
  IP_ADDR_STRING          GatewayList;
  IP_ADDR_STRING          DhcpServer;
  BOOL                    HaveWins;
  IP_ADDR_STRING          PrimaryWinsServer;
  IP_ADDR_STRING          SecondaryWinsServer;
  time_t                  LeaseObtained;
  time_t                  LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;

멤버

Next

형식: 구조체 _IP_ADAPTER_INFO*

어댑터 목록의 다음 어댑터에 대한 포인터입니다.

ComboIndex

형식:DWORD

예약되어 있습니다.

AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]

형식: char[MAX_ADAPTER_NAME_LENGTH + 4]

어댑터 이름의 ANSI 문자 문자열입니다.

Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]

형식: char[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]

어댑터에 대한 설명을 포함하는 ANSI 문자 문자열입니다.

AddressLength

형식: UINT

어댑터의 하드웨어 주소 길이(바이트)입니다.

Address[MAX_ADAPTER_ADDRESS_LENGTH]

형식: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]

BYTE 배열로 표시되는 어댑터의 하드웨어 주소입니다.

Index

형식:DWORD

어댑터 인덱스입니다.

어댑터를 사용하지 않도록 설정한 다음 사용하도록 설정하거나 다른 상황에서 어댑터 인덱스가 변경될 수 있으며 영구로 간주해서는 안 됩니다.

Type

형식: UINT

어댑터 유형입니다. 어댑터 유형에 대한 가능한 값은 Ipifcons.h 헤더 파일에 나열됩니다.

아래 표에는 Windows Vista 이상에서 다른 값이 가능하지만 어댑터 유형에 대한 일반적인 값이 나와 있습니다.

의미
MIB_IF_TYPE_OTHER
1
다른 유형의 네트워크 인터페이스.
MIB_IF_TYPE_ETHERNET
6
이더넷 네트워크 인터페이스.
IF_TYPE_ISO88025_TOKENRING
9
MIB_IF_TYPE_TOKENRING
MIB_IF_TYPE_PPP
23
PPP 네트워크 인터페이스.
MIB_IF_TYPE_LOOPBACK
24
소프트웨어 루프백 네트워크 인터페이스.
MIB_IF_TYPE_SLIP
28
ATM 네트워크 인터페이스입니다.
IF_TYPE_IEEE80211
71
IEEE 802.11 무선 네트워크 인터페이스.
참고 이 어댑터 유형은 Windows Vista 이상에서 반환됩니다. Windows Server 2003 및 Windows XP에서 IEEE 802.11 무선 네트워크 인터페이스는 어댑터 유형의 MIB_IF_TYPE_ETHERNET 반환합니다.
 

DhcpEnabled

형식: UINT

이 어댑터에 대해 DHCP(동적 호스트 구성 프로토콜)를 사용할 수 있는지 여부를 지정하는 옵션 값입니다.

CurrentIpAddress

형식: PIP_ADDR_STRING

예약되어 있습니다.

IpAddressList

형식: IP_ADDR_STRING

이 어댑터와 연결된 IPv4 주소 목록은 IP_ADDR_STRING 구조체의 연결된 목록으로 표시됩니다. 어댑터에는 여러 IPv4 주소가 할당되어 있을 수 있습니다.

GatewayList

형식: IP_ADDR_STRING

이 어댑터에 대한 게이트웨이의 IPv4 주소는 IP_ADDR_STRING 구조체의 연결된 목록으로 표시됩니다. 어댑터에는 여러 IPv4 게이트웨이 주소가 할당되어 있을 수 있습니다. 이 목록에는 일반적으로 이 어댑터에 대한 기본 게이트웨이의 IPv4 주소에 대한 단일 항목이 포함되어 있습니다.

DhcpServer

형식: IP_ADDR_STRING

이 어댑터에 대한 DHCP 서버의 IPv4 주소는 IP_ADDR_STRING 구조의 연결된 목록으로 표시됩니다. 이 목록에는 이 어댑터에 대한 DHCP 서버의 IPv4 주소에 대한 단일 항목이 포함되어 있습니다. 값이 255.255.255.255이면 DHCP 서버에 연결할 수 없거나 연결 중임을 나타냅니다.

이 멤버는 DhcpEnabled 멤버가 0이 아닌 경우에만 유효합니다.

HaveWins

형식: BOOL

이 어댑터가 WINS(Windows Internet Name Service)를 사용하는지 여부를 지정하는 옵션 값입니다.

PrimaryWinsServer

형식: IP_ADDR_STRING

IP_ADDR_STRING 구조의 연결된 목록으로 표시되는 기본 WINS 서버의 IPv4 주소입니다. 이 목록에는 이 어댑터에 대한 기본 WINS 서버의 IPv4 주소에 대한 단일 항목이 포함되어 있습니다.

이 멤버는 HaveWins 멤버가 TRUE인 경우에만 유효합니다.

SecondaryWinsServer

형식: IP_ADDR_STRING

IP_ADDR_STRING 구조의 연결된 목록으로 표시되는 보조 WINS 서버의 IPv4 주소입니다. 어댑터에는 여러 보조 WINS 서버 주소가 할당되어 있을 수 있습니다.

이 멤버는 HaveWins 멤버가 TRUE인 경우에만 유효합니다.

LeaseObtained

형식: time_t

현재 DHCP 임대를 얻은 시간입니다.

이 멤버는 DhcpEnabled 멤버가 0이 아닌 경우에만 유효합니다.

LeaseExpires

형식: time_t

현재 DHCP 임대가 만료되는 시간입니다.

이 멤버는 DhcpEnabled 멤버가 0이 아닌 경우에만 유효합니다.

설명

IP_ADAPTER_INFO 구조는 로컬 컴퓨터의 특정 네트워크 어댑터에 대한 IPv4 정보로 제한됩니다. IP_ADAPTER_INFO 구조체는 GetAdaptersInfo 함수를 호출하여 검색됩니다.

Visual Studio 2005 이상을 사용하는 경우 time_t 데이터 형식은 기본적으로 32비트 플랫폼의 LeaseObtainedLeaseExpires 멤버에 사용되는 4바이트 데이터 형식이 아닌 8바이트 데이터 형식으로 설정됩니다. 32비트 플랫폼에서 IP_ADAPTER_INFO 구조를 올바르게 사용하려면 애플리케이션을 컴파일할 때 _USE_32BIT_TIME_T (예: 옵션으로 사용 -D _USE_32BIT_TIME_T )을 정의하여 time_t 데이터 형식을 4바이트 데이터 형식으로 강제 적용합니다.

Windows XP 이상에서 사용하기 위해 IP_ADAPTER_ADDRESSES 구조에는 IPv4 및 IPv6 정보가 모두 포함됩니다. GetAdaptersAddresses 함수는 IPv4 및 IPv6 어댑터 정보를 검색합니다.

예제

다음은 어댑터 정보를 검색하고 각 어댑터의 다양한 속성을 인쇄하는 예제입니다.

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#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 __cdecl main()
{

    /* Declare and initialize variables */

// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter. 
//
// Note that this sample code only prints out the 
// first entry for the IP address/mask, and gateway, and
// the primary and secondary WINS server for each adapter. 

    PIP_ADAPTER_INFO pAdapterInfo;
    PIP_ADAPTER_INFO pAdapter = NULL;
    DWORD dwRetVal = 0;
    UINT i;

/* variables used to print DHCP time info */
    struct tm newtime;
    char buffer[32];
    errno_t error;

    ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
    pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
    if (pAdapterInfo == NULL) {
        printf("Error allocating memory needed to call GetAdaptersinfo\n");
        return 1;
    }
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
    if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
        FREE(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
        if (pAdapterInfo == NULL) {
            printf("Error allocating memory needed to call GetAdaptersinfo\n");
            return 1;
        }
    }

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
        pAdapter = pAdapterInfo;
        while (pAdapter) {
            printf("\tComboIndex: \t%d\n", pAdapter->ComboIndex);
            printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
            printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
            printf("\tAdapter Addr: \t");
            for (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("\tIndex: \t%d\n", pAdapter->Index);
            printf("\tType: \t");
            switch (pAdapter->Type) {
            case MIB_IF_TYPE_OTHER:
                printf("Other\n");
                break;
            case MIB_IF_TYPE_ETHERNET:
                printf("Ethernet\n");
                break;
            case MIB_IF_TYPE_TOKENRING:
                printf("Token Ring\n");
                break;
            case MIB_IF_TYPE_FDDI:
                printf("FDDI\n");
                break;
            case MIB_IF_TYPE_PPP:
                printf("PPP\n");
                break;
            case MIB_IF_TYPE_LOOPBACK:
                printf("Lookback\n");
                break;
            case MIB_IF_TYPE_SLIP:
                printf("Slip\n");
                break;
            default:
                printf("Unknown type %ld\n", pAdapter->Type);
                break;
            }

            printf("\tIP Address: \t%s\n",
                   pAdapter->IpAddressList.IpAddress.String);
            printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);

            printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
            printf("\t***\n");

            if (pAdapter->DhcpEnabled) {
                printf("\tDHCP Enabled: Yes\n");
                printf("\t  DHCP Server: \t%s\n",
                       pAdapter->DhcpServer.IpAddress.String);

                printf("\t  Lease Obtained: ");
                /* Display local time */
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
                if (error)
                    printf("Invalid Argument to _localtime32_s\n");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s\n");
                    else
                        /* asctime_s returns the string terminated by \n\0 */
                        printf("%s", buffer);
                }

                printf("\t  Lease Expires:  ");
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseExpires);
                if (error)
                    printf("Invalid Argument to _localtime32_s\n");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s\n");
                    else
                        /* asctime_s returns the string terminated by \n\0 */
                        printf("%s", buffer);
                }
            } else
                printf("\tDHCP Enabled: No\n");

            if (pAdapter->HaveWins) {
                printf("\tHave Wins: Yes\n");
                printf("\t  Primary Wins Server:    %s\n",
                       pAdapter->PrimaryWinsServer.IpAddress.String);
                printf("\t  Secondary Wins Server:  %s\n",
                       pAdapter->SecondaryWinsServer.IpAddress.String);
            } else
                printf("\tHave Wins: No\n");
            pAdapter = pAdapter->Next;
            printf("\n");
        }
    } else {
        printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);

    }
    if (pAdapterInfo)
        FREE(pAdapterInfo);

    return 0;
}

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
머리글 iptypes.h(Iphlpapi.h 포함)

참고 항목

GetAdaptersAddresses

GetAdaptersInfo

IP 도우미 시작 페이지

IP 도우미 구조

IP_ADAPTER_ADDRESSES

IP_ADDRESS_STRING

IP_ADDR_STRING