Fungsi GetIpNetTable2 (netioapi.h)
Fungsi
Sintaksis
IPHLPAPI_DLL_LINKAGE _NETIOAPI_SUCCESS_ NETIOAPI_API GetIpNetTable2(
[in] ADDRESS_FAMILY Family,
[out] PMIB_IPNET_TABLE2 *Table
);
Parameter
[in] Family
Keluarga alamat yang akan diambil.
Nilai yang mungkin untuk keluarga alamat tercantum dalam file header
Pada Windows SDK yang dirilis untuk Windows Vista dan yang lebih baru, organisasi file header telah berubah dan kemungkinan nilai untuk anggota ini didefinisikan dalam file header Ws2def.h. Perhatikan bahwa file header Ws2def.h
Nilai yang saat ini didukung adalah AF_INET, AF_INET6, dan AF_UNSPEC.
[out] Table
Penunjuk ke penunjuk ke struktur MIB_IPNET_TABLE2 yang berisi tabel entri alamat IP tetangga di komputer lokal.
Mengembalikan nilai
Jika fungsi berhasil, nilai yang dikembalikan adalah NO_ERROR atau ERROR_NOT_FOUND.
Jika fungsi gagal atau tidak mengembalikan data, nilai yang dikembalikan adalah salah satu kode kesalahan berikut.
Mengembalikan kode | Deskripsi |
---|---|
|
Parameter yang tidak valid diteruskan ke fungsi. Kesalahan ini dikembalikan jika penunjuk NULL |
|
Sumber daya memori tidak cukup tersedia untuk menyelesaikan operasi. |
|
Tidak ada entri alamat IP tetangga seperti yang ditentukan dalam parameter Keluarga Nilai pengembalian ini menunjukkan bahwa panggilan ke fungsi GetIpNetTable2 berhasil, tetapi tidak ada data yang akan dikembalikan. Ini dapat terjadi ketika AF_INET ditentukan dalam parameter Family dan tidak ada entri ARP yang akan dikembalikan. |
|
Permintaan tidak didukung.
Kesalahan ini dikembalikan jika tidak ada tumpukan IPv4 di komputer lokal dan |
|
Gunakan FormatMessage untuk mendapatkan string pesan untuk kesalahan yang dikembalikan. |
Komentar
Fungsi
Si
fungsi GetIpNetTable2 menghitung alamat IP tetangga pada sistem lokal dan mengembalikan informasi ini dalam struktur MIB_IPNET_TABLE2.
Entri alamat IP tetangga dikembalikan dalam struktur
Parameter Keluarga
Perhatikan bahwa struktur
Contoh
Contoh berikut mengambil tabel tetangga IP, lalu mencetak nilai untuk entri baris tetangga 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")
#pragma comment(lib, "ws2_32.lib")
int main()
{
// Declare and initialize variables
int i;
unsigned int j;
unsigned long status = 0;
PMIB_IPNET_TABLE2 pipTable = NULL;
// MIB_IPNET_ROW2 ipRow;
status = GetIpNetTable2(AF_INET, &pipTable);
if (status != NO_ERROR) {
printf("GetIpNetTable for IPv4 table returned error: %ld\n", status);
exit(1);
}
// Print some variables from the table
printf("Number of IPv4 table entries: %d\n\n", pipTable->NumEntries);
for (i = 0; (unsigned) i < pipTable->NumEntries; i++) {
// printf("Table entry: %d\n", i);
printf("IPv4 Address[%d]:\t %s\n", (int) i,
inet_ntoa(pipTable->Table[i].Address.Ipv4.sin_addr));
printf("Interface index[%d]:\t\t %lu\n", (int) i,
pipTable->Table[i].InterfaceIndex);
printf("Interface LUID NetLuidIndex[%d]:\t %lu\n",
(int) i, pipTable->Table[i].InterfaceLuid.Info.NetLuidIndex);
printf("Interface LUID IfType[%d]: ", (int) 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("Physical Address[%d]:\t ", (int) i);
if (pipTable->Table[i].PhysicalAddressLength == 0)
printf("\n");
// for (j = 0; (unsigned) j < pipTable->Table[i].PhysicalAddressLength; j++)
// printf ("%c"
for (j = 0; j < pipTable->Table[i].PhysicalAddressLength; j++) {
if (j == (pipTable->Table[i].PhysicalAddressLength - 1))
printf("%.2X\n", (int) pipTable->Table[i].PhysicalAddress[j]);
else
printf("%.2X-", (int) pipTable->Table[i].PhysicalAddress[j]);
}
printf("Physical Address Length[%d]:\t %lu\n", (int) i,
pipTable->Table[i].PhysicalAddressLength);
printf("Neighbor State[%d]:\t ", (int) i);
switch (pipTable->Table[i].State) {
case NlnsUnreachable:
printf("NlnsUnreachable\n");
break;
case NlnsIncomplete:
printf("NlnsIncomplete\n");
break;
case NlnsProbe:
printf("NlnsProbe\n");
break;
case NlnsDelay:
printf("NlnsDelay\n");
break;
case NlnsStale:
printf("NlnsStale\n");
break;
case NlnsReachable:
printf("NlnsReachable\n");
break;
case NlnsPermanent:
printf("NlnsPermanent\n");
break;
default:
printf("Unknown: %d\n", pipTable->Table[i].State);
break;
}
printf("Flags[%d]:\t\t %u\n", (int) i,
(unsigned char) pipTable->Table[i].Flags);
printf("ReachabilityTime[%d]:\t %lu\n\n", (int) i,
pipTable->Table[i].ReachabilityTime);
}
FreeMibTable(pipTable);
pipTable = NULL;
exit(0);
}
Persyaratan
Syarat | Nilai |
---|---|
klien minimum yang didukung | Windows Vista [hanya aplikasi desktop] |
server minimum yang didukung |
Windows Server 2008 [hanya aplikasi desktop] |
Platform Target |
Windows |
Header |
netioapi.h (termasuk Iphlpapi.h) |
Pustaka |
Iphlpapi.lib |
DLL |
Iphlpapi.dll |
Lihat juga