Bagikan melalui


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 .

Nilai Makna
IpPrefixOriginOther
0
Awalan alamat IP dikonfigurasi menggunakan sumber selain yang ditentukan dalam enumerasi ini. Nilai ini berlaku untuk alamat IPv6 atau IPv4.
IpPrefixOriginManual
1
Awalan alamat IP dikonfigurasi secara manual. Nilai ini berlaku untuk alamat IPv6 atau IPv4.
IpPrefixOriginWellKnown
2
Awalan alamat IP dikonfigurasi menggunakan alamat terkenal. Nilai ini berlaku untuk alamat lokal tautan IPv6 atau alamat loopback IPv6.
IpPrefixOriginDhcp
3
Awalan alamat IP dikonfigurasi menggunakan DHCP. Nilai ini berlaku untuk alamat IPv4 yang dikonfigurasi menggunakan DHCP atau alamat IPv6 yang dikonfigurasi menggunakan DHCPv6.
IpPrefixOriginRouterAdvertisement
4
Awalan alamat IP dikonfigurasi menggunakan iklan router. Nilai ini berlaku untuk alamat IPv6 anonim yang dihasilkan setelah menerima iklan router.
IpPrefixOriginUnchanged
16
Awalan alamat IP harus tidak berubah. Nilai ini digunakan saat mengatur properti untuk antarmuka IP unicast ketika nilai untuk asal awalan IP tidak boleh berubah.

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 .

Nilai Makna
IpSuffixOriginOther
0
Akhiran alamat IP dikonfigurasi menggunakan sumber selain yang ditentukan dalam enumerasi ini. Nilai ini berlaku untuk alamat IPv6 atau IPv4.
IpSuffixOriginManual
1
Akhiran alamat IP dikonfigurasi secara manual. Nilai ini berlaku untuk alamat IPv6 atau IPv4.
IpSuffixOriginWellKnown
2
Akhiran alamat IP dikonfigurasi menggunakan alamat terkenal. Nilai ini berlaku untuk alamat lokal tautan IPv6 atau alamat loopback IPv6.
IpSuffixOriginDhcp
3
Akhiran alamat IP dikonfigurasi menggunakan DHCP. Nilai ini berlaku untuk alamat IPv4 yang dikonfigurasi menggunakan DHCP atau alamat IPv6 yang dikonfigurasi menggunakan DHCPv6.
IpSuffixOriginLinkLayerAddress
4
Akhiran alamat IP adalah alamat lokal tautan. Nilai ini berlaku untuk alamat lokal tautan IPv6 atau alamat IPv6 tempat bagian jaringan dihasilkan berdasarkan iklan router dan bagian host didasarkan pada alamat perangkat keras MAC.
IpSuffixOriginRandom
5
Akhiran alamat IP dihasilkan secara acak. Nilai ini berlaku untuk alamat IPv6 anonim di mana bagian host alamat dihasilkan secara acak dari alamat perangkat keras MAC setelah menerima iklan router.
IpSuffixOriginUnchanged
16
Akhiran alamat IP tidak boleh berubah. Nilai ini digunakan saat mengatur properti untuk antarmuka IP unicast ketika nilai untuk asal akhiran IP tidak boleh berubah.

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 .

Nilai Makna
IpDadStateInvalid
0
Status DAD tidak valid.
IpDadStateTentative
1
Status DAD bersifat tentatif.
IpDadStateDuplicate
2
Alamat IP duplikat telah terdeteksi.
IpDadStateDeprecated
3
Alamat IP tidak digunakan lagi.
IpDadStatePreferred
4
Alamat IP adalah alamat yang disukai.

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

CreateUnicastIpAddressEntry

DeleteUnicastIpAddressEntry

GetAddrInfoEx

GetAddrInfoW

GetUnicastIpAddressEntry

GetUnicastIpAddressTable

InitializeUnicastIpAddressEntry

MIB_UNICASTIPADDRESS_TABLE

SOCKADDR_INET

SetUnicastIpAddressEntry

getaddrinfo