Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die MIB_UNICASTIPADDRESS_ROW-Struktur speichert Informationen zu einer Unicast-IP-Adresse.
Syntax
typedef struct _MIB_UNICASTIPADDRESS_ROW {
SOCKADDR_INET Address;
NET_LUID InterfaceLuid;
NET_IFINDEX InterfaceIndex;
NL_PREFIX_ORIGIN PrefixOrigin;
NL_SUFFIX_ORIGIN SuffixOrigin;
ULONG ValidLifetime;
ULONG PreferredLifetime;
UINT8 OnLinkPrefixLength;
BOOLEAN SkipAsSource;
NL_DAD_STATE DadState;
SCOPE_ID ScopeId;
LARGE_INTEGER CreationTimeStamp;
} MIB_UNICASTIPADDRESS_ROW, *PMIB_UNICASTIPADDRESS_ROW;
Member
Address
Typ: SOCKADDR_INET
Die Unicast-IP-Adresse. Bei diesem Member kann es sich um eine IPv6-Adresse oder eine IPv4-Adresse handeln.
InterfaceLuid
Typ: NET_LUID
Der lokal eindeutige Bezeichner (LUID) für die Netzwerkschnittstelle, die dieser IP-Adresse zugeordnet ist.
InterfaceIndex
Typ: NET_IFINDEX
Der lokale Indexwert für die Netzwerkschnittstelle, die dieser IP-Adresse zugeordnet ist. Dieser Indexwert kann sich ändern, wenn ein Netzwerkadapter deaktiviert und dann aktiviert wird, oder unter anderen Umständen, und er sollte nicht als persistent betrachtet werden.
PrefixOrigin
Typ: NL_PREFIX_ORIGIN
Der Ursprung des Präfixes oder des Netzwerkteils der IP-Adresse. Dieser Member kann einer der Werte aus dem NL_PREFIX_ORIGIN Enumerationstyp sein, der in der Headerdatei Nldef.h definiert ist.
SuffixOrigin
Typ: NL_SUFFIX_ORIGIN
Der Ursprung des Suffixes oder des Hostteils der IP-Adresse. Dieser Member kann einer der Werte aus dem NL_SUFFIX_ORIGIN Enumerationstyp sein, der in der Nldef.h-Headerdatei definiert ist.
ValidLifetime
Typ: ULONG
Die maximale Zeit in Sekunden, in der die IP-Adresse gültig ist. Ein Wert von 0xffffffff gilt als unendlich.
PreferredLifetime
Typ: ULONG
Die bevorzugte Zeit in Sekunden, zu der die IP-Adresse gültig ist. Ein Wert von 0xffffffff gilt als unendlich.
OnLinkPrefixLength
Typ: UINT8
Die Länge des Präfixes oder des Netzwerkteils der IP-Adresse in Bits. Für eine Unicast-IPv4-Adresse ist jeder Wert größer als 32 ein unzulässiger Wert. Für eine Unicast-IPv6-Adresse ist jeder Wert größer als 128 ein unzulässiger Wert. Der Wert 255 wird häufig verwendet, um einen unzulässigen Wert darzustellen.
SkipAsSource
Typ: BOOLEAN
Dieser Member gibt an, ob die Adresse als IP-Quelladresse verwendet werden kann.
DadState
Typ: NL_DAD_STATE
Der doppelte Adresserkennungszustand (DAD). Die Erkennung doppelter Adressen gilt sowohl für IPv6- als auch für IPv4-Adressen. Dieser Member kann einer der Werte aus dem NL_DAD_STATE Enumerationstyp sein, der in der Headerdatei Nldef.h definiert ist.
ScopeId
Typ: SCOPE_ID
Die Bereichs-ID der IP-Adresse. Dieses Mitglied gilt nur für eine IPv6-Adresse. Dieser Member kann nicht festgelegt werden. Sie wird automatisch von der Schnittstelle bestimmt, auf der die Adresse hinzugefügt wurde.
CreationTimeStamp
Typ: LARGE_INTEGER
Der Zeitstempel, bei dem die IP-Adresse erstellt wurde.
Hinweise
Die MIB_UNICASTIPADDRESS_ROW-Struktur wird unter Windows Vista und höher definiert.
Das SkipAsSource-Element der MIB_UNICASTIPADDRESS_ROW-Struktur wirkt sich auf den Betrieb der Funktionen getaddrinfo, GetAddrInfoW und GetAddrInfoEx in Windows-Sockets aus. Wenn der an die Getaddrinfo- oder GetAddrInfoW-Funktionen übergebene pNodeName-Parameter oder der an die GetAddrInfoEx-Funktion übergebene pName-Parameter auf einen Computernamen verweist, werden alle permanenten Adressen für den Computer zurückgegeben, die als Quelladresse verwendet werden können. Unter Windows Vista und höher enthalten diese Adressen alle Unicast-IP-Adressen, die von den Funktionen GetUnicastIpAddressTable oder GetUnicastIpAddressEntry zurückgegeben werden, bei denen das SkipAsSource-Element in der MIB_UNICASTIPADDRESS_ROW-Struktur auf false festgelegt ist.
Wenn sich der pNodeName - oder pName-Parameter auf den Namen eines virtuellen Clustersservers bezieht, werden nur virtuelle Serveradressen zurückgegeben. Unter Windows Vista und höher enthalten diese Adressen alle Unicast-IP-Adressen, die von den Funktionen GetUnicastIpAddressTable oder GetUnicastIpAddressEntry zurückgegeben werden, in denen das SkipAsSource-Element in der MIB_UNICASTIPADDRESS_ROW-Struktur auf true festgelegt ist. Weitere Informationen zum Clustering finden Sie unter Windows-Clustering .
Windows 7 mit Service Pack 1 (SP1) und Windows Server 2008 R2 mit Service Pack 1 (SP1) bieten Unterstützung für Netsh.exe zum Festlegen des SkipAsSource-Attributs für eine IP-Adresse. Dieser Hotfix ändert auch das Verhalten, sodass die IP-Adresse im DNS registriert wird, wenn das SkipAsSource-Element in der MIB_UNICASTIPADDRESS_ROW-Struktur auf false festgelegt ist. Wenn das SkipAsSource-Element auf true festgelegt ist, wird die IP-Adresse nicht im DNS registriert.
Für Windows 7 und Windows Server 2008 R2 ist ein Hotfix verfügbar, der Netsh.exe unterstützung für das Festlegen des SkipAsSource-Attributs für eine IP-Adresse hinzufügt. Dieser Hotfix ändert auch das Verhalten, sodass die IP-Adresse im DNS registriert wird, wenn das SkipAsSource-Element in der MIB_UNICASTIPADDRESS_ROW-Struktur auf false festgelegt ist. Wenn das SkipAsSource-Element auf true festgelegt ist, wird die IP-Adresse nicht im DNS registriert. Weitere Informationen finden Sie unter Knowledge Base (KB) 2386184.
Ein ähnlicher Hotfix ist auch für Windows Vista mit Service Pack 2 (SP2) und Windows Server 2008 mit Service Pack 2 (SP2) verfügbar, der unterstützung für Netsh.exe zum Festlegen des SkipAsSource-Attributs für eine IP-Adresse hinzufügt. Dieser Hotfix ändert auch das Verhalten, sodass die IP-Adresse im DNS registriert wird, wenn das SkipAsSource-Element in der MIB_UNICASTIPADDRESS_ROW-Struktur auf false festgelegt ist. Wenn das SkipAsSource-Element auf true festgelegt ist, wird die IP-Adresse nicht im DNS registriert.
Beispiele
Im folgenden Beispiel wird eine Unicast-IP-Adresstabelle abgerufen und einige Werte aus den einzelnen abgerufenen MIB_UNICASTIPADDRESS_ROW-Strukturen ausgegeben.
#ifndef UNICODE
#define UNICODE
#endif
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <Windows.h.>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <ws2ipdef.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
// Need to link with Iphlpapi.lib and Ws2_32.lib
#pragma comment (lib, "iphlpapi.lib")
#pragma comment (lib, "Ws2_32.lib")
int __cdecl wmain()
{
// Declare and initialize variables
unsigned int i;
DWORD Result = 0;
WCHAR Ipv4String[16] = { 0 };
WCHAR Ipv6String[46] = { 0 };
PMIB_UNICASTIPADDRESS_TABLE pipTable = NULL;
Result = GetUnicastIpAddressTable(AF_UNSPEC, &pipTable);
if (Result != NO_ERROR) {
wprintf(L"GetUnicastIpAddressTable returned error: %ld\n", Result);
exit(1);
}
// Print some variables from the rows in the table
wprintf(L"Number of table entries: %d\n\n", pipTable->NumEntries);
for (i = 0; i < pipTable->NumEntries; i++) {
wprintf(L"AddressFamily[%d]:\t\t ", i);
switch (pipTable->Table[i].Address.si_family) {
case AF_INET:
wprintf(L"IPv4\n");
if (InetNtopW
(AF_INET, &pipTable->Table[i].Address.Ipv4.sin_addr, Ipv4String,
16) != NULL)
wprintf(L"IPv4 Address:\t\t\t %ws\n", Ipv4String);
break;
case AF_INET6:
wprintf(L"IPv6\n");
if (InetNtopW
(AF_INET6, &pipTable->Table[i].Address.Ipv6.sin6_addr,
Ipv6String, 46) != NULL)
wprintf(L"IPv6 Address:\t\t\t %ws\n", Ipv6String);
break;
default:
wprintf(L"Other: %d\n", pipTable->Table[i].Address.si_family);
break;
}
wprintf(L"Interface LUID NetLuidIndex[%d]: %lu\n",
i, pipTable->Table[i].InterfaceLuid.Info.NetLuidIndex);
wprintf(L"Interface LUID IfType[%d]:\t ", i);
switch (pipTable->Table[i].InterfaceLuid.Info.IfType) {
case IF_TYPE_OTHER:
wprintf(L"Other\n");
break;
case IF_TYPE_ETHERNET_CSMACD:
wprintf(L"Ethernet\n");
break;
case IF_TYPE_ISO88025_TOKENRING:
wprintf(L"Token ring\n");
break;
case IF_TYPE_PPP:
wprintf(L"PPP\n");
break;
case IF_TYPE_SOFTWARE_LOOPBACK:
wprintf(L"Software loopback\n");
break;
case IF_TYPE_ATM:
wprintf(L"ATM\n");
break;
case IF_TYPE_IEEE80211:
wprintf(L"802.11 wireless\n");
break;
case IF_TYPE_TUNNEL:
wprintf(L"Tunnel encapsulation\n");
break;
case IF_TYPE_IEEE1394:
wprintf(L"IEEE 1394 (Firewire)\n");
break;
default:
wprintf(L"Unknown: %d\n",
pipTable->Table[i].InterfaceLuid.Info.IfType);
break;
}
wprintf(L"Interface Index[%d]:\t\t %lu\n",
i, pipTable->Table[i].InterfaceIndex);
wprintf(L"Prefix Origin[%d]:\t\t ", i);
switch (pipTable->Table[i].PrefixOrigin) {
case IpPrefixOriginOther:
wprintf(L"IpPrefixOriginOther\n");
break;
case IpPrefixOriginManual:
wprintf(L"IpPrefixOriginManual\n");
break;
case IpPrefixOriginWellKnown:
wprintf(L"IpPrefixOriginWellKnown\n");
break;
case IpPrefixOriginDhcp:
wprintf(L"IpPrefixOriginDhcp\n");
break;
case IpPrefixOriginRouterAdvertisement:
wprintf(L"IpPrefixOriginRouterAdvertisement\n");
break;
case IpPrefixOriginUnchanged:
wprintf(L"IpPrefixOriginUnchanged\n");
break;
default:
wprintf(L"Unknown: %d\n", pipTable->Table[i].PrefixOrigin);
break;
}
wprintf(L"Suffix Origin[%d]:\t\t ", i);
switch (pipTable->Table[i].SuffixOrigin) {
case IpSuffixOriginOther:
wprintf(L"IpSuffixOriginOther\n");
break;
case IpSuffixOriginManual:
wprintf(L"IpSuffixOriginManual\n");
break;
case IpSuffixOriginWellKnown:
wprintf(L"IpSuffixOriginWellKnown\n");
break;
case IpSuffixOriginDhcp:
wprintf(L"IpSuffixOriginDhcp\n");
break;
case IpSuffixOriginLinkLayerAddress:
wprintf(L"IpSuffixOriginLinkLayerAddress\n");
break;
case IpSuffixOriginRandom:
wprintf(L"IpSuffixOriginRandom\n");
break;
case IpSuffixOriginUnchanged:
wprintf(L"IpSuffixOriginUnchanged\n");
break;
default:
wprintf(L"Unknown: %d\n", pipTable->Table[i].SuffixOrigin);
break;
}
wprintf(L"Valid Lifetime[%d]:\t\t 0x%x (%u)\n", i,
pipTable->Table[i].ValidLifetime,
pipTable->Table[i].ValidLifetime);
wprintf(L"Preferred Lifetime[%d]:\t\t 0x%x (%u)\n", i,
pipTable->Table[i].PreferredLifetime,
pipTable->Table[i].PreferredLifetime);
wprintf(L"OnLink PrefixLength[%d]:\t\t %lu\n", i,
pipTable->Table[i].OnLinkPrefixLength);
wprintf(L"Skip As Source[%d]:\t\t ", i);
if (pipTable->Table[i].SkipAsSource)
wprintf(L"Yes\n");
else
wprintf(L"No\n");
wprintf(L"Dad State[%d]:\t\t\t ", i);
switch (pipTable->Table[i].DadState) {
case IpDadStateInvalid:
wprintf(L"IpDadStateInvalid\n");
break;
case IpDadStateTentative:
wprintf(L"IpDadStateTentative\n");
break;
case IpDadStateDuplicate:
wprintf(L"IpDadStateDuplicate\n");
break;
case IpDadStateDeprecated:
wprintf(L"IpDadStateDeprecated\n");
break;
case IpDadStatePreferred:
wprintf(L"IpDadStatePreferred\n");
break;
default:
wprintf(L"Unknown: %d\n", pipTable->Table[i].DadState);
break;
}
wprintf(L"\n");
}
if (pipTable != NULL) {
FreeMibTable(pipTable);
pipTable = NULL;
}
exit(0);
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 [nur Desktop-Apps] |
Kopfzeile | netioapi.h (include Iphlpapi.h) |