Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Fungsi GetIpForwardTable mengambil tabel perutean IPv4.
Sintaks
IPHLPAPI_DLL_LINKAGE DWORD GetIpForwardTable(
[out] PMIB_IPFORWARDTABLE pIpForwardTable,
[in, out] PULONG pdwSize,
[in] BOOL bOrder
);
Parameter
[out] pIpForwardTable
Penunjuk ke buffer yang menerima tabel perutean IPv4 sebagai struktur MIB_IPFORWARDTABLE .
[in, out] pdwSize
Pada input, menentukan ukuran dalam byte buffer yang diacu oleh parameter pIpForwardTable .
Pada output, jika buffer tidak cukup besar untuk menahan tabel perutean yang dikembalikan, fungsi mengatur parameter ini sama dengan ukuran buffer yang diperlukan dalam byte.
[in] bOrder
Nilai Boolean yang menentukan apakah tabel yang dikembalikan harus diurutkan. Jika parameter ini TRUE, tabel diurutkan dalam urutan:
- Alamat tujuan
- Protokol yang menghasilkan rute
- Kebijakan perutean multipath
- Alamat lompatan berikutnya
Nilai kembali
Jika fungsi berhasil, nilai yang dikembalikan adalah NO_ERROR (nol).
Jika fungsi gagal, nilai yang dikembalikan adalah salah satu kode kesalahan berikut.
| Menampilkan kode | Deskripsi |
|---|---|
|
Buffer yang ditujukkan oleh parameter pIpForwardTable tidak cukup besar. Ukuran yang diperlukan dikembalikan dalam variabel DWORD yang diarahkan oleh parameter pdwSize . |
|
Parameter pdwSize adalah NULL, atau GetIpForwardTable tidak dapat menulis ke memori yang diarahkan oleh parameter pdwSize . |
|
Tidak ada data yang tersedia. Kesalahan ini dikembalikan jika tidak ada rute yang ada di komputer lokal. |
|
Fungsi ini tidak didukung pada sistem operasi yang digunakan pada sistem lokal. Kesalahan ini dikembalikan jika tidak ada tumpukan IP yang terinstal pada komputer lokal. |
|
Gunakan FormatMessage untuk mendapatkan string pesan untuk kesalahan yang dikembalikan. |
Keterangan
Anggota dwForwardProto dari struktur MIB_IPFORWARDROW menentukan protokol atau mekanisme perutean yang menghasilkan rute. Lihat Pengidentifikasi Protokol untuk daftar kemungkinan protokol dan mekanisme perutean.
Anggota dwForwardDest, dwForwardMask, dan dwForwardNextHop dari struktur MIB_IPFORWARDROW mewakili alamat IPv4 dalam urutan byte jaringan.
Alamat IPv4 0.0.0.0 di anggota dwForwardDest dari struktur MIB_IPFORWARDROW dianggap sebagai rute default. MIB_IPFORWARDTABLE mungkin berisi beberapa entri MIB_IPFORWARDROW dengan anggota dwForwardDest diatur ke 0.0.0.0 ketika ada beberapa adaptor jaringan yang diinstal.
Ketika dwForwardAge diatur ke INFINITE, rute tidak akan dihapus berdasarkan batas waktu
Nilai. Nilai lain untuk dwForwardAge menentukan jumlah detik sejak rute ditambahkan atau dimodifikasi dalam tabel perutean jaringan.
Pada Windows Server 2003 atau Windows 2000 Server saat Perutean dan Layanan Akses Jarak Jauh (RRAS) berjalan, entri MIB_IPFORWARDROW yang dikembalikan memiliki anggota dwForwardType dan dwForwardAge yang diatur ke nol.
Pada Windows Vista dan Windows Server 2008, metrik rute yang ditentukan dalam anggota dwForwardMetric1 dari struktur MIB_IPFORWARDROW mewakili kombinasi metrik rute yang ditambahkan ke metrik antarmuka yang ditentukan dalam anggota Metrik dari struktur MIB_IPINTERFACE_ROW antarmuka terkait. Jadi anggota dwForwardMetric1 dari struktur MIB_IPFORWARDROW harus sama dengan atau lebih besar dari anggota Metrik dari struktur MIB_IPINTERFACE_ROW terkait. Jika aplikasi ingin mengatur metrik rute ke 0 pada Windows Vista dan Windows Server 2008, maka anggota dwForwardMetric1 dari struktur MIB_IPFORWARDROW harus diatur sama dengan nilai metrik antarmuka yang ditentukan dalam anggota Metrik dari struktur MIB_IPINTERFACE_ROW terkait. Aplikasi dapat mengambil metrik antarmuka dengan memanggil fungsi GetIpInterfaceEntry .
Sejumlah anggota entri struktur MIB_IPFORWARDROW yang dikembalikan oleh GetIpForwardTable saat ini tidak digunakan oleh perutean IPv4. Anggota ini termasuk dwForwardPolicy, dwForwardNextHopAS, dwForwardMetric2, dwForwardMetric3, dwForwardMetric4, dan dwForwardMetric5.
Contoh
Contoh berikut mengambil tabel perutean IP lalu mencetak beberapa bidang untuk setiap rute dalam tabel.
// Need to link with Ws2_32.lib and Iphlpapi.lib
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iphlpapi.h>
#include <stdio.h>
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */
int main()
{
// Declare and initialize variables.
/* variables used for GetIfForwardTable */
PMIB_IPFORWARDTABLE pIpForwardTable;
DWORD dwSize = 0;
DWORD dwRetVal = 0;
char szDestIp[128];
char szMaskIp[128];
char szGatewayIp[128];
struct in_addr IpAddr;
int i;
pIpForwardTable =
(MIB_IPFORWARDTABLE *) MALLOC(sizeof (MIB_IPFORWARDTABLE));
if (pIpForwardTable == NULL) {
printf("Error allocating memory\n");
return 1;
}
if (GetIpForwardTable(pIpForwardTable, &dwSize, 0) ==
ERROR_INSUFFICIENT_BUFFER) {
FREE(pIpForwardTable);
pIpForwardTable = (MIB_IPFORWARDTABLE *) MALLOC(dwSize);
if (pIpForwardTable == NULL) {
printf("Error allocating memory\n");
return 1;
}
}
/* Note that the IPv4 addresses returned in
* GetIpForwardTable entries are in network byte order
*/
if ((dwRetVal = GetIpForwardTable(pIpForwardTable, &dwSize, 0)) == NO_ERROR) {
printf("\tNumber of entries: %d\n",
(int) pIpForwardTable->dwNumEntries);
for (i = 0; i < (int) pIpForwardTable->dwNumEntries; i++) {
/* Convert IPv4 addresses to strings */
IpAddr.S_un.S_addr =
(u_long) pIpForwardTable->table[i].dwForwardDest;
strcpy_s(szDestIp, sizeof (szDestIp), inet_ntoa(IpAddr));
IpAddr.S_un.S_addr =
(u_long) pIpForwardTable->table[i].dwForwardMask;
strcpy_s(szMaskIp, sizeof (szMaskIp), inet_ntoa(IpAddr));
IpAddr.S_un.S_addr =
(u_long) pIpForwardTable->table[i].dwForwardNextHop;
strcpy_s(szGatewayIp, sizeof (szGatewayIp), inet_ntoa(IpAddr));
printf("\n\tRoute[%d] Dest IP: %s\n", i, szDestIp);
printf("\tRoute[%d] Subnet Mask: %s\n", i, szMaskIp);
printf("\tRoute[%d] Next Hop: %s\n", i, szGatewayIp);
printf("\tRoute[%d] If Index: %ld\n", i,
pIpForwardTable->table[i].dwForwardIfIndex);
printf("\tRoute[%d] Type: %ld - ", i,
pIpForwardTable->table[i].dwForwardType);
switch (pIpForwardTable->table[i].dwForwardType) {
case MIB_IPROUTE_TYPE_OTHER:
printf("other\n");
break;
case MIB_IPROUTE_TYPE_INVALID:
printf("invalid route\n");
break;
case MIB_IPROUTE_TYPE_DIRECT:
printf("local route where next hop is final destination\n");
break;
case MIB_IPROUTE_TYPE_INDIRECT:
printf
("remote route where next hop is not final destination\n");
break;
default:
printf("UNKNOWN Type value\n");
break;
}
printf("\tRoute[%d] Proto: %ld - ", i,
pIpForwardTable->table[i].dwForwardProto);
switch (pIpForwardTable->table[i].dwForwardProto) {
case MIB_IPPROTO_OTHER:
printf("other\n");
break;
case MIB_IPPROTO_LOCAL:
printf("local interface\n");
break;
case MIB_IPPROTO_NETMGMT:
printf("static route set through network management \n");
break;
case MIB_IPPROTO_ICMP:
printf("result of ICMP redirect\n");
break;
case MIB_IPPROTO_EGP:
printf("Exterior Gateway Protocol (EGP)\n");
break;
case MIB_IPPROTO_GGP:
printf("Gateway-to-Gateway Protocol (GGP)\n");
break;
case MIB_IPPROTO_HELLO:
printf("Hello protocol\n");
break;
case MIB_IPPROTO_RIP:
printf("Routing Information Protocol (RIP)\n");
break;
case MIB_IPPROTO_IS_IS:
printf
("Intermediate System-to-Intermediate System (IS-IS) protocol\n");
break;
case MIB_IPPROTO_ES_IS:
printf("End System-to-Intermediate System (ES-IS) protocol\n");
break;
case MIB_IPPROTO_CISCO:
printf("Cisco Interior Gateway Routing Protocol (IGRP)\n");
break;
case MIB_IPPROTO_BBN:
printf("BBN Internet Gateway Protocol (IGP) using SPF\n");
break;
case MIB_IPPROTO_OSPF:
printf("Open Shortest Path First (OSPF) protocol\n");
break;
case MIB_IPPROTO_BGP:
printf("Border Gateway Protocol (BGP)\n");
break;
case MIB_IPPROTO_NT_AUTOSTATIC:
printf("special Windows auto static route\n");
break;
case MIB_IPPROTO_NT_STATIC:
printf("special Windows static route\n");
break;
case MIB_IPPROTO_NT_STATIC_NON_DOD:
printf
("special Windows static route not based on Internet standards\n");
break;
default:
printf("UNKNOWN Proto value\n");
break;
}
printf("\tRoute[%d] Age: %ld\n", i,
pIpForwardTable->table[i].dwForwardAge);
printf("\tRoute[%d] Metric1: %ld\n", i,
pIpForwardTable->table[i].dwForwardMetric1);
}
FREE(pIpForwardTable);
return 0;
} else {
printf("\tGetIpForwardTable failed.\n");
FREE(pIpForwardTable);
return 1;
}
}
Persyaratan
| Klien minimum yang didukung | Windows 2000 Professional [hanya aplikasi desktop] |
| Server minimum yang didukung | Windows 2000 Server [hanya aplikasi desktop] |
| Target Platform | Windows |
| Header | iphlpapi.h |
| Pustaka | Iphlpapi.lib |
| DLL | Iphlpapi.dll |