Bagikan melalui


Fungsi GetIpInterfaceTable (netioapi.h)

Fungsi GetIpInterfaceTable mengambil entri antarmuka IP di komputer lokal.

Sintaks

IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpInterfaceTable(
  [in]  ADDRESS_FAMILY         Family,
  [out] PMIB_IPINTERFACE_TABLE *Table
);

Parameter

[in] Family

Keluarga alamat antarmuka IP untuk diambil.

Nilai yang mungkin untuk keluarga alamat tercantum dalam file header Winsock2.h . Perhatikan bahwa nilai untuk keluarga alamat AF_ dan konstanta keluarga protokol PF_ identik (misalnya, AF_INET dan PF_INET), sehingga konstanta mana pun dapat digunakan.

Pada Windows Vista dan kemudian serta pada Windows SDK, organisasi file header telah berubah dan nilai yang mungkin untuk anggota ini didefinisikan dalam file header Ws2def.h . Perhatikan bahwa file header Ws2def.h secara otomatis disertakan dalam Winsock2.h, dan tidak boleh digunakan secara langsung.

Nilai yang saat ini didukung adalah AF_INET, AF_INET6, dan AF_UNSPEC.

Nilai Makna
AF_UNSPEC
0
Keluarga alamat tidak ditentukan. Ketika parameter ini ditentukan, fungsi GetIpInterfaceTable mengembalikan tabel antarmuka IP yang berisi entri IPv4 dan IPv6.
AF_INET
2
Keluarga alamat Protokol Internet versi 4 (IPv4).
AF_INET6
23
Keluarga alamat Protokol Internet versi 6 (IPv6).

[out] Table

Penunjuk ke buffer yang menerima tabel entri antarmuka IP dalam struktur MIB_IPINTERFACE_TABLE .

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan adalah NO_ERROR.

Jika fungsi gagal, nilai yang dikembalikan adalah salah satu kode kesalahan berikut.

Menampilkan kode Deskripsi
ERROR_INVALID_PARAMETER
Parameter yang tidak valid diteruskan ke fungsi. Kesalahan ini dikembalikan jika penunjuk NULL diteruskan dalam parameter Tabel atau parameter Family tidak ditentukan sebagai AF_INET, AF_INET6, atau AF_UNSPEC.
ERROR_NOT_ENOUGH_MEMORY
Sumber daya memori tidak cukup tersedia untuk menyelesaikan operasi.
ERROR_NOT_FOUND
Tidak ada entri antarmuka IP seperti yang ditentukan dalam parameter Keluarga yang ditemukan.
ERROR_NOT_SUPPORTED
Fungsi ini tidak didukung. Kesalahan ini dikembalikan ketika transportasi IP yang ditentukan dalam parameter Alamat tidak dikonfigurasi pada komputer lokal. Kesalahan ini juga dikembalikan pada versi Windows di mana fungsi ini tidak didukung.
Lainnya
Gunakan fungsi FormatMessage untuk mendapatkan string pesan untuk kesalahan yang dikembalikan.

Keterangan

Fungsi GetIpInterfaceTable didefinisikan pada Windows Vista dan yang lebih baru.

The
Fungsi GetIpInterfaceTable menghitung antarmuka IP pada sistem lokal dan mengembalikan informasi ini dalam struktur MIB_IPINTERFACE_TABLE .

Entri antarmuka IP dikembalikan dalam struktur MIB_IPINTERFACE_TABLE dalam buffer yang ditujukkan oleh parameter Tabel . Struktur MIB_IPINTERFACE_TABLE berisi jumlah entri antarmuka IP dan array struktur MIB_IPINTERFACE_ROW untuk setiap entri antarmuka IP. Ketika struktur yang dikembalikan ini tidak lagi diperlukan, kosongkan memori dengan memanggil FreeMibTable.

Parameter Family harus diinisialisasi ke AF_INET atau AF_INET6.

Perhatikan bahwa struktur MIB_IPINTERFACE_TABLE yang dikembalikan yang diarahkan oleh parameter Tabel mungkin berisi pengisi untuk perataan antara anggota NumEntries dan entri array MIB_IPINTERFACE_ROW pertama di anggota Tabel dari struktur MIB_IPINTERFACE_TABLE . Padding untuk perataan mungkin juga ada di antara entri array MIB_IPINTERFACE_ROW . Setiap akses ke entri array MIB_IPINTERFACE_ROW harus mengasumsikan padding mungkin ada.

Contoh

Contoh berikut mengambil tabel antarmuka IP, lalu mencetak nilai beberapa anggota entri antarmuka IP dalam tabel.

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <winsock2.h>
#include <ws2ipdef.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>

#pragma comment(lib, "iphlpapi.lib")

int main()
{
    // Declare and initialize variables

    int i;

    DWORD dwRetVal = 0;

    PMIB_IPINTERFACE_TABLE pipTable = NULL;

    dwRetVal = GetIpInterfaceTable(AF_UNSPEC, &pipTable);
    if (dwRetVal != NO_ERROR) {
        printf("GetIpInterfaceTable returned error: %ld\n", dwRetVal);
        exit(1);
    }
    // Print some variables from the rows in the table
    printf("Number of table entries: %d\n\n", pipTable->NumEntries);

    for (i = 0; i < (int) pipTable->NumEntries; i++) {
        printf("Address Family[%d]:\t\t", i);
        switch (pipTable->Table[i].Family) {
        case AF_INET:
            printf("IPv4\n");
            break;
        case AF_INET6:
            printf("IPv6\n");
            break;
        default:
            printf("Other: %d\n", pipTable->Table[i].Family);
            break;
        }

        printf("Interface LUID NetLuidIndex[%d]:\t %lu\n",
               i, pipTable->Table[i].InterfaceLuid.Info.NetLuidIndex);

        printf("Interface LUID IfType[%d]:\t ", i);
        switch (pipTable->Table[i].InterfaceLuid.Info.IfType) {
        case IF_TYPE_OTHER:
            printf("Other\n");
            break;
        case IF_TYPE_ETHERNET_CSMACD:
            printf("Ethernet\n");
            break;
        case IF_TYPE_ISO88025_TOKENRING:
            printf("Token ring\n");
            break;
        case IF_TYPE_PPP:
            printf("PPP\n");
            break;
        case IF_TYPE_SOFTWARE_LOOPBACK:
            printf("Software loopback\n");
            break;
        case IF_TYPE_ATM:
            printf("ATM\n");
            break;
        case IF_TYPE_IEEE80211:
            printf("802.11 wireless\n");
            break;
        case IF_TYPE_TUNNEL:
            printf("Tunnel encapsulation\n");
            break;
        case IF_TYPE_IEEE1394:
            printf("IEEE 1394 (Firewire)\n");
            break;
        default:
            printf("Unknown: %d\n",
                   pipTable->Table[i].InterfaceLuid.Info.IfType);
            break;
        }
        printf("Interface Index[%d]:\t\t %lu\n",
               i, pipTable->Table[i].InterfaceIndex);
        printf("Maximum reassembly size[%d]:\t %lu\n", i,
               pipTable->Table[i].MaxReassemblySize);

        printf("Advertising enabled[%d]:\t\t ", i);
        if (pipTable->Table[i].AdvertisingEnabled)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Forwarding enabled[%d]:\t\t ", i);
        if (pipTable->Table[i].ForwardingEnabled)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Network layer MTU[%d]:\t\t %lu\n", i, pipTable->Table[i].NlMtu);

        printf("Connected[%d]:\t\t\t ", i);
        if (pipTable->Table[i].Connected)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports wakeup patterns[%d]:\t ", i);
        if (pipTable->Table[i].SupportsWakeUpPatterns)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports neighbor discovery[%d]:\t ", i);
        if (pipTable->Table[i].SupportsNeighborDiscovery)
            printf("Yes\n");
        else
            printf("No\n");

        printf("Supports router discovery[%d]:\t ", i);
        if (pipTable->Table[i].SupportsRouterDiscovery)
            printf("Yes\n");
        else
            printf("No\n");

        printf("\n");
    }

    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]
Target Platform Windows
Header netioapi.h (termasuk Iphlpapi.h)
Pustaka Iphlpapi.lib
DLL Iphlpapi.dll

Lihat juga

FreeMibTable

GetIfEntry2

GetIfStackTable

GetIfTable2

GetInvertedIfStackTable

GetIpInterfaceEntry

Referensi Fungsi Pembantu IP

InitializeIpInterfaceEntry

MIB_IF_ROW2

MIB_IF_TABLE2

MIB_IPINTERFACE_ROW

MIB_IPINTERFACE_TABLE

NotifyIpInterfaceChange