struktur MIB_UNICASTIPADDRESS_ROW (netioapi.h)
Struktur MIB_UNICASTIPADDRESS_ROW menyimpan informasi tentang alamat IP unicast.
Sintaks
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;
Anggota
Address
Jenis: SOCKADDR_INET
Alamat IP unicast. Anggota ini dapat menjadi alamat IPv6 atau alamat IPv4.
InterfaceLuid
Jenis: NET_LUID
Pengidentifikasi unik lokal (LUID) untuk antarmuka jaringan yang terkait dengan alamat IP ini.
InterfaceIndex
Jenis: NET_IFINDEX
Nilai indeks lokal untuk antarmuka jaringan yang terkait dengan alamat IP ini. Nilai indeks ini dapat berubah ketika adaptor jaringan dinonaktifkan dan kemudian diaktifkan, atau dalam keadaan lain, dan tidak boleh dianggap persisten.
PrefixOrigin
Jenis: NL_PREFIX_ORIGIN
Asal awalan atau bagian jaringan dari IP alamat. Anggota ini dapat menjadi salah satu nilai dari jenis enumerasi NL_PREFIX_ORIGIN yang ditentukan dalam file header Nldef.h .
SuffixOrigin
Jenis: NL_SUFFIX_ORIGIN
Asal akhiran atau bagian host dari IP alamat. Anggota ini dapat menjadi salah satu nilai dari jenis enumerasi NL_SUFFIX_ORIGIN yang ditentukan dalam file header Nldef.h .
ValidLifetime
Jenis: ULONG
Waktu maksimum, dalam detik, bahwa alamat IP valid. Nilai 0xffffffff dianggap tak terbatas.
PreferredLifetime
Jenis: ULONG
Waktu yang disukai, dalam detik, bahwa alamat IP valid. Nilai 0xffffffff dianggap tak terbatas.
OnLinkPrefixLength
Jenis: UINT8
Panjang, dalam bit, dari awalan atau bagian jaringan dari alamat IP. Untuk alamat IPv4 unicast, nilai apa pun yang lebih besar dari 32 adalah nilai ilegal. Untuk alamat IPv6 unicast, nilai apa pun yang lebih besar dari 128 adalah nilai ilegal. Nilai 255 umumnya digunakan untuk mewakili nilai ilegal.
SkipAsSource
Jenis: BOOLEAN
Anggota ini menentukan apakah alamat dapat digunakan sebagai alamat sumber IP.
DadState
Jenis: NL_DAD_STATE
Status deteksi Alamat duplikat (DAD). Deteksi alamat duplikat berlaku untuk alamat IPv6 dan IPv4. Anggota ini dapat menjadi salah satu nilai dari jenis enumerasi NL_DAD_STATE yang ditentukan dalam file header Nldef.h .
ScopeId
Jenis: SCOPE_ID
ID cakupan alamat IP. Anggota ini hanya berlaku untuk alamat IPv6. Anggota ini tidak dapat disetel. Ini secara otomatis ditentukan oleh antarmuka tempat alamat ditambahkan.
CreationTimeStamp
Jenis: LARGE_INTEGER
Stempel waktu saat alamat IP dibuat.
Keterangan
Struktur MIB_UNICASTIPADDRESS_ROW didefinisikan pada Windows Vista dan yang lebih baru.
Anggota SkipAsSource dari struktur MIB_UNICASTIPADDRESS_ROW memengaruhi pengoperasian fungsi getaddrinfo, GetAddrInfoW, dan GetAddrInfoEx di soket Windows. Jika parameter pNodeName diteruskan ke fungsi getaddrinfo atau GetAddrInfoW atau parameter pName yang diteruskan ke fungsi GetAddrInfoEx menunjuk ke nama komputer, semua alamat permanen untuk komputer yang dapat digunakan sebagai alamat sumber dikembalikan. Pada Windows Vista dan yang lebih baru, alamat ini akan mencakup semua alamat IP unicast yang dikembalikan oleh fungsi GetUnicastIpAddressTable atau GetUnicastIpAddressEntry tempat anggota SkipAsSource diatur ke false dalam struktur MIB_UNICASTIPADDRESS_ROW .
Jika parameter pNodeName atau pName mengacu pada nama server virtual kluster, hanya alamat server virtual yang dikembalikan. Pada Windows Vista dan yang lebih baru, alamat ini akan mencakup semua alamat IP unicast yang dikembalikan oleh fungsi GetUnicastIpAddressTable atau GetUnicastIpAddressEntry tempat anggota SkipAsSource diatur ke true dalam struktur MIB_UNICASTIPADDRESS_ROW . Lihat Pengklusteran Windows untuk informasi selengkapnya tentang pengklusteran.
Windows 7 dengan Paket Layanan 1 (SP1) dan Windows Server 2008 R2 dengan Paket Layanan 1 (SP1) menambahkan dukungan ke Netsh.exe untuk mengatur atribut SkipAsSource pada alamat IP. Perbaikan ini juga mengubah perilaku sehingga jika anggota SkipAsSource dalam struktur MIB_UNICASTIPADDRESS_ROW diatur ke false, alamat IP akan didaftarkan di DNS. Jika anggota SkipAsSource diatur ke true, alamat IP tidak terdaftar di DNS.
Perbaikan tersedia untuk Windows 7 dan Windows Server 2008 R2 yang menambahkan dukungan ke Netsh.exe untuk mengatur atribut SkipAsSource pada alamat IP. Perbaikan ini juga mengubah perilaku sehingga jika anggota SkipAsSource dalam struktur MIB_UNICASTIPADDRESS_ROW diatur ke false, alamat IP akan didaftarkan di DNS. Jika anggota SkipAsSource diatur ke true, alamat IP tidak terdaftar di DNS. Untuk informasi selengkapnya, lihat 2386184 Pangkalan Pengetahuan (KB).
Perbaikan serupa juga tersedia untuk Windows Vista dengan Paket Layanan 2 (SP2) dan Windows Server 2008 dengan Paket Layanan 2 (SP2) yang menambahkan dukungan ke Netsh.exe untuk mengatur atribut SkipAsSource pada alamat IP. Perbaikan ini juga mengubah perilaku sehingga jika anggota SkipAsSource dalam struktur MIB_UNICASTIPADDRESS_ROW diatur ke false, alamat IP akan didaftarkan di DNS. Jika anggota SkipAsSource diatur ke true, alamat IP tidak terdaftar di DNS.
Contoh
Contoh berikut mengambil tabel alamat IP unicast dan mencetak beberapa nilai dari masing-masing struktur MIB_UNICASTIPADDRESS_ROW yang diambil.
#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);
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2008 [hanya aplikasi desktop] |
Header | netioapi.h (termasuk Iphlpapi.h) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk