IP_ADAPTER_ADDRESSES_LH 구조체(iptypes.h)
IP_ADAPTER_ADDRESSES 구조는 특정 어댑터의 연결된 주소 목록에 대한 헤더 노드입니다. 이 구조체는 IP_ADAPTER_ADDRESSES 구조체 의 연결된 목록의 일부로 동시에 사용할 수 있습니다.
구문
typedef struct _IP_ADAPTER_ADDRESSES_LH {
union {
ULONGLONG Alignment;
struct {
ULONG Length;
IF_INDEX IfIndex;
};
};
struct _IP_ADAPTER_ADDRESSES_LH *Next;
PCHAR AdapterName;
PIP_ADAPTER_UNICAST_ADDRESS_LH FirstUnicastAddress;
PIP_ADAPTER_ANYCAST_ADDRESS_XP FirstAnycastAddress;
PIP_ADAPTER_MULTICAST_ADDRESS_XP FirstMulticastAddress;
PIP_ADAPTER_DNS_SERVER_ADDRESS_XP FirstDnsServerAddress;
PWCHAR DnsSuffix;
PWCHAR Description;
PWCHAR FriendlyName;
BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
ULONG PhysicalAddressLength;
union {
ULONG Flags;
struct {
ULONG DdnsEnabled : 1;
ULONG RegisterAdapterSuffix : 1;
ULONG Dhcpv4Enabled : 1;
ULONG ReceiveOnly : 1;
ULONG NoMulticast : 1;
ULONG Ipv6OtherStatefulConfig : 1;
ULONG NetbiosOverTcpipEnabled : 1;
ULONG Ipv4Enabled : 1;
ULONG Ipv6Enabled : 1;
ULONG Ipv6ManagedAddressConfigurationSupported : 1;
};
};
ULONG Mtu;
IFTYPE IfType;
IF_OPER_STATUS OperStatus;
IF_INDEX Ipv6IfIndex;
ULONG ZoneIndices[16];
PIP_ADAPTER_PREFIX_XP FirstPrefix;
ULONG64 TransmitLinkSpeed;
ULONG64 ReceiveLinkSpeed;
PIP_ADAPTER_WINS_SERVER_ADDRESS_LH FirstWinsServerAddress;
PIP_ADAPTER_GATEWAY_ADDRESS_LH FirstGatewayAddress;
ULONG Ipv4Metric;
ULONG Ipv6Metric;
IF_LUID Luid;
SOCKET_ADDRESS Dhcpv4Server;
NET_IF_COMPARTMENT_ID CompartmentId;
NET_IF_NETWORK_GUID NetworkGuid;
NET_IF_CONNECTION_TYPE ConnectionType;
TUNNEL_TYPE TunnelType;
SOCKET_ADDRESS Dhcpv6Server;
BYTE Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH];
ULONG Dhcpv6ClientDuidLength;
ULONG Dhcpv6Iaid;
PIP_ADAPTER_DNS_SUFFIX FirstDnsSuffix;
} IP_ADAPTER_ADDRESSES_LH, *PIP_ADAPTER_ADDRESSES_LH;
멤버
Alignment
형식: ULONGLONG
예약되어 있습니다. 컴파일러에서 구조를 정렬하는 데 사용됩니다.
Length
형식: ULONG
이 구조체의 길이(바이트)입니다. IP_ADAPTER_ADDRESSES 구조체의 길이는 WINDOWS XP SP1 이상 및 Windows Vista 이상에서 변경되었습니다.
IfIndex
형식:DWORD
이러한 주소가 연결된 IPv4 인터페이스의 인덱스입니다. Windows Server 2003 및 Windows XP에서는 인터페이스에서 IPv4를 사용할 수 없는 경우 이 멤버는 0입니다.
Next
형식: 구조체 _IP_ADAPTER_ADDRESSES*
다음 어댑터에 대한 포인터는 목록의 구조체를 주소로 지정합니다.
AdapterName
형식: PCHAR
이러한 주소가 연결된 어댑터의 이름을 포함하는 문자 배열입니다. 어댑터의 식별 이름과 달리 AdapterName 에 지정된 어댑터 이름은 영구적이며 사용자가 수정할 수 없습니다.
FirstUnicastAddress
형식: PIP_ADAPTER_UNICAST_ADDRESS
어댑터에 대한 IP 유니캐스트 주소의 연결된 목록에서 첫 번째 IP_ADAPTER_UNICAST_ADDRESS 구조체에 대한 포인터입니다.
FirstAnycastAddress
형식: PIP_ADAPTER_ANYCAST_ADDRESS
어댑터에 대한 IP 애니캐스트 주소의 연결된 목록에서 첫 번째 IP_ADAPTER_ANYCAST_ADDRESS 구조체에 대한 포인터입니다.
FirstMulticastAddress
형식: PIP_ADAPTER_MULTICAST_ADDRESS
어댑터에 대한 IP 멀티캐스트 주소 목록의 첫 번째 IP_ADAPTER_MULTICAST_ADDRESS 구조체에 대한 포인터입니다.
FirstDnsServerAddress
형식: PIP_ADAPTER_DNS_SERVER_ADDRESS
어댑터에 대한 DNS 서버 주소의 연결된 목록에서 첫 번째 IP_ADAPTER_DNS_SERVER_ADDRESS 구조체에 대한 포인터입니다.
DnsSuffix
형식: PWCHAR
이 어댑터와 연결된 DNS(Domain Name System) 접미사입니다.
Description
형식: PWCHAR
어댑터에 대한 설명입니다. 이 멤버는 읽기 전용입니다.
FriendlyName
형식: PWCHAR
어댑터의 사용자에게 친숙한 이름입니다. 예: "Local Area Connection 1." 이 이름은 ipconfig 명령줄 프로그램 및 연결 폴더와 같은 컨텍스트에 나타납니다. 이 멤버는 읽기 전용이며 IP 도우미 함수를 사용하여 수정할 수 없습니다.
이 멤버는 RFC 2863에 설명된 대로 NDIS에서 사용하는 ifAlias 필드입니다. ifAlias 필드는 NDIS 드라이버가 설치될 때 NDIS 인터페이스 공급자가 설정할 수 있습니다. NDIS 미니포트 드라이버의 경우 이 필드는 NDIS에 의해 설정됩니다.
PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]
형식: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
어댑터의 MAC(Media Access Control) 주소입니다. 예를 들어 이더넷 네트워크에서 이 멤버는 이더넷 하드웨어 주소를 지정합니다.
PhysicalAddressLength
형식:DWORD
PhysicalAddress 멤버에 지정된 주소의 길이(바이트)입니다. 데이터 링크 계층이 없는 인터페이스의 경우 이 값은 0입니다.
Flags
형식:DWORD
어댑터에 대한 다양한 설정을 지정하는 플래그 집합입니다. 이러한 값은 Iptypes.h 헤더 파일에 정의됩니다. 이러한 플래그 비트의 조합이 가능합니다.
DdnsEnabled
RegisterAdapterSuffix
Dhcpv4Enabled
ReceiveOnly
NoMulticast
Ipv6OtherStatefulConfig
NetbiosOverTcpipEnabled
Ipv4Enabled
Ipv6Enabled
Ipv6ManagedAddressConfigurationSupported
Mtu
형식:DWORD
MTU(최대 전송 단위) 크기(바이트)입니다.
IfType
형식:DWORD
IANA(Internet Assigned Names Authority)에서 정의한 인터페이스 형식입니다. 인터페이스 형식에 사용할 수 있는 값은 Ipifcons.h 헤더 파일에 나열됩니다.
아래 표에는 인터페이스 형식에 대한 공통 값이 나와 있지만 다른 많은 값이 가능합니다.
값 | 의미 |
---|---|
|
다른 유형의 네트워크 인터페이스. |
|
이더넷 네트워크 인터페이스. |
|
토큰 링 네트워크 인터페이스입니다. |
|
PPP 네트워크 인터페이스. |
|
소프트웨어 루프백 네트워크 인터페이스. |
|
ATM 네트워크 인터페이스입니다. |
|
IEEE 802.11 무선 네트워크 인터페이스.
Windows Vista 이상에서는 무선 네트워크 카드가 IF_TYPE_IEEE80211 보고됩니다. 이전 버전의 Windows에서는 무선 네트워크 카드가 IF_TYPE_ETHERNET_CSMACD 보고됩니다. SP3이 설치된 Windows XP 및 SP2 x86이 설치된 Windows XP에서 SP2가 설치된 Windows XP의 경우 WlanEnumInterfaces 함수를 사용하여 로컬 컴퓨터에서 무선 인터페이스를 열거할 수 있습니다. |
|
터널 형식 캡슐화 네트워크 인터페이스입니다. |
|
IEEE 1394(Firewire) 고성능 직렬 버스 네트워크 인터페이스. |
OperStatus
형식: IF_OPER_STATUS
RFC 2863에 정의된 인터페이스에 대한 운영 상태. 자세한 내용은 http://www.ietf.org/rfc/rfc2863.txt를 참조하세요. 이 멤버는 Iftypes.h 헤더 파일에 정의된 IF_OPER_STATUS 열거형 형식의 값 중 하나일 수 있습니다. Windows Vista 이상에서는 헤더 파일이 다시 구성되었으며 이 열거형은 Ifdef.h 헤더 파일에 정의되어 있습니다.
Ipv6IfIndex
형식:DWORD
IPv6 IP 주소의 인터페이스 인덱스입니다. 인터페이스에서 IPv6을 사용할 수 없는 경우 이 멤버는 0입니다.
ZoneIndices[16]
형식: DWORD[16]
sockaddr 구조를 구성하는 데 사용되는 각 scope 수준에 대한 scope ID 배열입니다. SCOPE_LEVEL 열거형은 배열을 인덱싱하는 데 사용됩니다. IPv6에서는 단일 인터페이스에 scope ID에 따라 여러 IPv6 멀티캐스트 주소가 할당될 수 있습니다.
FirstPrefix
형식: PIP_ADAPTER_PREFIX
어댑터에 대한 IP 어댑터 접두사 링크 목록의 첫 번째 IP_ADAPTER_PREFIX 구조체에 대한 포인터입니다.
TransmitLinkSpeed
형식: ULONG64
어댑터에 대한 전송 링크의 현재 속도(초당 비트)입니다.
ReceiveLinkSpeed
형식: ULONG64
어댑터에 대한 수신 링크의 현재 속도(초당 비트)입니다.
FirstWinsServerAddress
형식: PIP_ADAPTER_WINS_SERVER_ADDRESS_LH
어댑터에 대한 WINS(Windows Internet Name Service) 서버 주소의 연결된 목록의 첫 번째 IP_ADAPTER_WINS_SERVER_ADDRESS 구조체에 대한 포인터입니다.
FirstGatewayAddress
형식: PIP_ADAPTER_GATEWAY_ADDRESS_LH
어댑터에 대한 연결된 게이트웨이 목록의 첫 번째 IP_ADAPTER_GATEWAY_ADDRESS 구조체에 대한 포인터입니다.
Ipv4Metric
형식: ULONG
어댑터 주소에 대한 IPv4 인터페이스 메트릭입니다. 이 멤버는 IPv4 어댑터 주소에만 적용됩니다.
IPv4의 경로 기본 설정을 계산하는 데 사용되는 실제 경로 메트릭은 MIB_IPFORWARD_ROW2 구조의 메트릭 멤버에 지정된 경로 메트릭 오프셋과 IPv4에 대해 이 멤버에 지정된 인터페이스 메트릭의 합계입니다.
Ipv6Metric
형식: ULONG
어댑터 주소에 대한 IPv6 인터페이스 메트릭입니다. 이 멤버는 IPv6 어댑터 주소에만 적용됩니다.
IPv6의 경로 기본 설정을 계산하는 데 사용되는 실제 경로 메트릭은 MIB_IPFORWARD_ROW2 구조의 메트릭 멤버에 지정된 경로 메트릭 오프셋과 IPv4에 대해 이 멤버에 지정된 인터페이스 메트릭의 합계입니다.
Luid
형식: IF_LUID
어댑터 주소의 인터페이스 LUID입니다.
Dhcpv4Server
형식: SOCKET_ADDRESS
어댑터 주소에 대한 DHCP 서버의 IPv4 주소입니다. 이 멤버는 DHCP를 사용하여 구성된 IPv4 어댑터 주소에만 적용됩니다.
CompartmentId
형식: NET_IF_COMPARTMENT_ID
어댑터 주소의 라우팅 구획 ID입니다.
NetworkGuid
형식: NET_IF_NETWORK_GUID
인터페이스가 속한 네트워크와 연결된 GUID 입니다.
인터페이스 공급자가 네트워크 GUID를 제공할 수 없는 경우 이 멤버는 GUID가 0일 수 있습니다. 이 경우 인터페이스는 기본 네트워크의 NDIS에 의해 등록되었습니다.
ConnectionType
형식: NET_IF_CONNECTION_TYPE
어댑터 주소의 인터페이스 연결 유형입니다.
이 멤버는 Ifdef.h 헤더 파일에 정의된 NET_IF_CONNECTION_TYPE 열거형 형식의 값 중 하나일 수 있습니다.
TunnelType
형식: TUNNEL_TYPE
어댑터 주소가 터널인 경우 터널에서 사용하는 캡슐화 방법입니다.
Dhcpv6Server
형식: SOCKET_ADDRESS
어댑터 주소에 대한 DHCPv6 서버의 IPv6 주소입니다. 이 멤버는 DHCPv6을 사용하여 구성된 IPv6 어댑터 주소에만 적용됩니다. 이 구조체 멤버는 현재 지원되지 않으며 나중에 사용하도록 예약되어 있습니다.
Dhcpv6ClientDuid[MAX_DHCPV6_DUID_LENGTH]
형식: BYTE[MAX_DHCPV6_DUID_LENGTH]
DHCPv6 클라이언트에 대한 DHCP DUID(고유 식별자)입니다. 이 멤버는 DHCPv6을 사용하여 구성된 IPv6 어댑터 주소에만 적용됩니다.
Dhcpv6ClientDuidLength
형식: ULONG
DHCPv6 클라이언트에 대한 DHCP DUID(고유 식별자)의 길이(바이트)입니다. 이 멤버는 DHCPv6을 사용하여 구성된 IPv6 어댑터 주소에만 적용됩니다.
Dhcpv6Iaid
형식: ULONG
DHCPv6 클라이언트에서 선택한 ID 연결의 식별자입니다. 이 멤버는 DHCPv6을 사용하여 구성된 IPv6 어댑터 주소에만 적용됩니다.
FirstDnsSuffix
형식: PIP_ADAPTER_DNS_SUFFIX
어댑터에 대한 DNS 접미사 연결 목록의 첫 번째 IP_ADAPTER_DNS_SUFFIX 구조체에 대한 포인터입니다.
설명
GetAdaptersAddresses 함수는 IPv4 및 IPv6 주소에 대한 정보를 검색하고 이 정보를 IP_ADAPTER_ADDRESSES 구조체의 연결된 목록으로 반환합니다.
IfIndex 및 Ipv6IfIndex 멤버에 지정된 어댑터 인덱스 값은 어댑터를 사용하지 않도록 설정한 다음 사용하도록 설정하거나 다른 상황에서는 변경할 수 있으며 영구로 간주해서는 안 됩니다.
IfType 멤버의 값은 Ipifcons.h 헤더 파일에 정의되어 있습니다. IfType 멤버의 설명에 나열된 가능한 값만 현재 지원됩니다.
windows XP SP1 이상에서 IP_ADAPTER_ADDRESSES 구조체의 크기가 변경되었습니다. IP_ADAPTER_ADDRESSES 구조체의 크기도 Windows Vista 이상에서 변경되었습니다. IP_ADAPTER_ADDRESSES 구조의 크기도 WINDOWS Vista SP1 이상 및Windows Server 2008 이상에서 변경되었습니다. Length 멤버를 사용하여 사용 중인 IP_ADAPTER_ADDRESSES 구조체의 버전을 결정해야 합니다.
SP1 이상을 사용하는 Windows XP의 IP_ADAPTER_ADDRESSES 구조 버전에는 Ipv6IfIndex, ZoneIndices 및 FirstPrefix라는 새 멤버가 추가되었습니다.
Windows Vista 이상에서 IP_ADAPTER_ADDRESSES 구조의 버전에는 새 멤버가 추가 되었습니다. TransmitLinkSpeed, ReceiveLinkSpeed, FirstWinsServerAddress, FirstGatewayAddress, Ipv4Metric, Ipv6Metric, Luid, Dhcpv4Server, CompartmentId, NetworkGuid, ConnectionType, TunnelType, Dhcpv6Server, Dhcpv6ClientDuid, Dhcpv6ClientDuidLength 및 Dhcpv6Iaid.
Sp1 이상 및 Windows Server 2008 이상에서 Windows Vista의 IP_ADAPTER_ADDRESSES 구조 버전에는 FirstDnsSuffix라는 새 멤버가 추가되었습니다.
Ipv4Metric 및 Ipv6Metric 멤버는 로컬 컴퓨터의 여러 인터페이스에 연결된 경로에 대한 경로 메트릭의 우선 순위를 지정하는 데 사용됩니다.
GetAdaptersAddresses 함수에서 반환하는 FirstUnicastAddress 멤버가 가리키는 연결된 IP_ADAPTER_UNICAST_ADDRESS 구조체의 순서는 IP 주소가 어댑터에 추가된 순서를 반영하지 않으며 Windows 버전마다 다를 수 있습니다. 마찬가지로 FirstAnycastAddress 멤버가 가리키는 연결된 IP_ADAPTER_ANYCAST_ADDRESS 구조체의 순서와 FirstMulticastAddress 멤버가 가리키는 연결된 IP_ADAPTER_MULTICAST_ADDRESS 구조의 순서는 IP 주소가 어댑터에 추가된 순서를 반영하지 않으며 Windows 버전마다 다를 수 있습니다.
또한 FirstUnicastAddress 멤버가 가리키는 연결된 IP_ADAPTER_UNICAST_ADDRESS 구조체와 FirstPrefix 멤버가 가리키는 연결된 IP_ADAPTER_PREFIX 구조체는 운영 체제에서 별도의 내부 연결된 목록으로 유지 관리됩니다. 따라서 FirstUnicastAddress 멤버가 가리키는 연결된 IP_ADAPTER_UNICAST_ADDRESS 구조체의 순서는 FirstPrefix 멤버가 가리키는 연결된 IP_ADAPTER_PREFIX 구조체의 순서와 관계가 없습니다.
Windows Vista 이상에서는 FirstPrefix 멤버가 가리키는 연결된 IP_ADAPTER_PREFIX 구조체에 어댑터에 할당된 각 IP 주소에 대해 3개의 IP 어댑터 접두사를 포함합니다. 여기에는 호스트 IP 주소 접두사, 서브넷 IP 주소 접두사 및 서브넷 브로드캐스트 IP 주소 접두사 등이 포함됩니다. 또한 각 어댑터에는 멀티캐스트 주소 접두사 및 브로드캐스트 주소 접두사도 있습니다.
Windows XP SP1 이상 Windows Vista에서 FirstPrefix 멤버가 가리키는 연결된 IP_ADAPTER_PREFIX 구조에는 어댑터에 할당된 각 IP 주소에 대한 단일 IP 어댑터 접두사만 포함됩니다.
Windows SDK에서 Windows Vista 이상에서 사용할 구조체의 버전은 IP_ADAPTER_ADDRESSES_LH 정의됩니다. Microsoft Windows SDK(소프트웨어 개발 키트)에서 SP1 이상 Windows XP를 포함하여 이전 시스템에서 사용할 이 구조의 버전은 IP_ADAPTER_ADDRESSES_XP 정의됩니다. 대상 플랫폼이 Windows Vista 이상(NTDDI_VERSION >= NTDDI_LONGHORN
, _WIN32_WINNT >= 0x0600
또는 WINVER >= 0x0600
)인 경우 애플리케이션을 컴파일할 때 IP_ADAPTER_ADDRESSES_LH 구조체는 IP_ADAPTER_ADDRESSES 구조체에 형식 정의됩니다. 대상 플랫폼이 Windows Vista 이상이 아닌 경우 애플리케이션을 컴파일할 때 IP_ADAPTER_ADDRESSES_XP 구조체는 IP_ADAPTER_ADDRESSES 구조체에 형식 정의됩니다.
SOCKET_ADDRESS 구조체는 IP_ADAPTER_ADDRESSES 구조체에 사용됩니다. Windows Vista 이상용으로 릴리스된 Windows SDK에서 헤더 파일의 organization 변경되었으며 SOCKET_ADDRESS 구조는 Winsock2.h 헤더 파일에 의해 자동으로 포함되는 Ws2def.h 헤더 파일에 정의됩니다. Windows Server 2003 및 Windows XP용으로 릴리스된 플랫폼 SDK(소프트웨어 개발 키트)에서 SOCKET_ADDRESS 구조는 Winsock2.h 헤더 파일에 선언됩니다. IP_ADAPTER_ADDRESSES 구조를 사용하려면 Iphlpapi.h 헤더 파일 앞에 Winsock2.h 헤더 파일을 포함해야 합니다.
예제
이 예제에서는 시스템과 연결된 어댑터의 IP_ADAPTER_ADDRESSES 구조를 검색하고 각 어댑터 인터페이스에 대한 일부 멤버를 출력합니다.
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.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(int argc, char **argv)
{
/* Declare and initialize variables */
DWORD dwSize = 0;
DWORD dwRetVal = 0;
unsigned int i = 0;
// Set the flags to pass to GetAdaptersAddresses
ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
// default to unspecified address family (both)
ULONG family = AF_UNSPEC;
LPVOID lpMsgBuf = NULL;
PIP_ADAPTER_ADDRESSES pAddresses = NULL;
ULONG outBufLen = 0;
PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;
PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;
PIP_ADAPTER_ANYCAST_ADDRESS pAnycast = NULL;
PIP_ADAPTER_MULTICAST_ADDRESS pMulticast = NULL;
IP_ADAPTER_DNS_SERVER_ADDRESS *pDnServer = NULL;
IP_ADAPTER_PREFIX *pPrefix = NULL;
if (argc != 2) {
printf(" Usage: getadapteraddresses family\n");
printf(" getadapteraddresses 4 (for IPv4)\n");
printf(" getadapteraddresses 6 (for IPv6)\n");
printf(" getadapteraddresses A (for both IPv4 and IPv6)\n");
exit(1);
}
if (atoi(argv[1]) == 4)
family = AF_INET;
else if (atoi(argv[1]) == 6)
family = AF_INET6;
outBufLen = sizeof (IP_ADAPTER_ADDRESSES);
pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
// Make an initial call to GetAdaptersAddresses to get the
// size needed into the outBufLen variable
if (GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen)
== ERROR_BUFFER_OVERFLOW) {
FREE(pAddresses);
pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
}
if (pAddresses == NULL) {
printf("Memory allocation failed for IP_ADAPTER_ADDRESSES struct\n");
exit(1);
}
// Make a second call to GetAdaptersAddresses to get the
// actual data we want
printf("Memory allocated for GetAdapterAddresses = %d bytes\n", outBufLen);
printf("Calling GetAdaptersAddresses function with family = ");
if (family == AF_INET)
printf("AF_INET\n");
if (family == AF_INET6)
printf("AF_INET6\n");
if (family == AF_UNSPEC)
printf("AF_UNSPEC\n\n");
dwRetVal =
GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen);
if (dwRetVal == NO_ERROR) {
// If successful, output some information from the data we received
pCurrAddresses = pAddresses;
while (pCurrAddresses) {
printf("\tLength of the IP_ADAPTER_ADDRESS struct: %ld\n",
pCurrAddresses->Length);
printf("\tIfIndex (IPv4 interface): %u\n", pCurrAddresses->IfIndex);
printf("\tAdapter name: %s\n", pCurrAddresses->AdapterName);
pUnicast = pCurrAddresses->FirstUnicastAddress;
if (pUnicast != NULL) {
for (i = 0; pUnicast != NULL; i++)
pUnicast = pUnicast->Next;
printf("\tNumber of Unicast Addresses: %d\n", i);
} else
printf("\tNo Unicast Addresses\n");
pAnycast = pCurrAddresses->FirstAnycastAddress;
if (pAnycast) {
for (i = 0; pAnycast != NULL; i++)
pAnycast = pAnycast->Next;
printf("\tNumber of Anycast Addresses: %d\n", i);
} else
printf("\tNo Anycast Addresses\n");
pMulticast = pCurrAddresses->FirstMulticastAddress;
if (pMulticast) {
for (i = 0; pMulticast != NULL; i++)
pMulticast = pMulticast->Next;
printf("\tNumber of Multicast Addresses: %d\n", i);
} else
printf("\tNo Multicast Addresses\n");
pDnServer = pCurrAddresses->FirstDnsServerAddress;
if (pDnServer) {
for (i = 0; pDnServer != NULL; i++)
pDnServer = pDnServer->Next;
printf("\tNumber of DNS Server Addresses: %d\n", i);
} else
printf("\tNo DNS Server Addresses\n");
printf("\tDNS Suffix: %wS\n", pCurrAddresses->DnsSuffix);
printf("\tDescription: %wS\n", pCurrAddresses->Description);
printf("\tFriendly name: %wS\n", pCurrAddresses->FriendlyName);
if (pCurrAddresses->PhysicalAddressLength != 0) {
printf("\tPhysical address: ");
for (i = 0; i < pCurrAddresses->PhysicalAddressLength;
i++) {
if (i == (pCurrAddresses->PhysicalAddressLength - 1))
printf("%.2X\n",
(int) pCurrAddresses->PhysicalAddress[i]);
else
printf("%.2X-",
(int) pCurrAddresses->PhysicalAddress[i]);
}
}
printf("\tFlags: %ld\n", pCurrAddresses->Flags);
printf("\tMtu: %lu\n", pCurrAddresses->Mtu);
printf("\tIfType: %ld\n", pCurrAddresses->IfType);
printf("\tOperStatus: %ld\n", pCurrAddresses->OperStatus);
printf("\tIpv6IfIndex (IPv6 interface): %u\n",
pCurrAddresses->Ipv6IfIndex);
printf("\tZoneIndices (hex): ");
for (i = 0; i < 16; i++)
printf("%lx ", pCurrAddresses->ZoneIndices[i]);
printf("\n");
pPrefix = pCurrAddresses->FirstPrefix;
if (pPrefix) {
for (i = 0; pPrefix != NULL; i++)
pPrefix = pPrefix->Next;
printf("\tNumber of IP Adapter Prefix entries: %d\n", i);
} else
printf("\tNo IP Adapter Prefix entries\n");
printf("\n");
pCurrAddresses = pCurrAddresses->Next;
}
} else {
printf("Call to GetAdaptersAddresses failed with error: %d\n",
dwRetVal);
if (dwRetVal == ERROR_NO_DATA)
printf("\tNo addresses were found for the requested parameters\n");
else {
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) & lpMsgBuf, 0, NULL)) {
printf("\tError: %s", lpMsgBuf);
LocalFree(lpMsgBuf);
FREE(pAddresses);
exit(1);
}
}
}
FREE(pAddresses);
return 0;
}
요구 사항
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
머리글 | iptypes.h(Iphlpapi.h 포함) |
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기