Mengelola Alamat IP Menggunakan GetIpAddrTable
Fungsi GetIpAddrTable mengisi penunjuk ke struktur MIB_IPADDRTABLE dengan informasi tentang alamat IP saat ini yang terkait dengan sistem.
Untuk menggunakan GetIpAddrTable
Deklarasikan penunjuk ke objek MIB_IPADDRTABLE yang disebut pIPAddrTable, dan objek DWORD yang disebut dwSize. Variabel ini diteruskan sebagai parameter ke fungsi GetIpAddrTable . Buat juga variabel DWORD yang disebut dwRetVal (digunakan untuk pemeriksaan kesalahan).
MIB_IPADDRTABLE *pIPAddrTable; DWORD dwSize = 0; DWORD dwRetVal;
Alokasikan memori untuk struktur.
Catatan
Ukuran dwSize tidak cukup untuk menyimpan informasi. Lihat langkah selanjutnya.
pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
Lakukan panggilan awal ke GetIpAddrTable untuk mendapatkan ukuran yang diperlukan ke dalam variabel dwSize .
Catatan
Panggilan ke fungsi ini dimaksudkan untuk gagal, dan digunakan untuk memastikan bahwa variabel dwSize menentukan ukuran yang cukup untuk menyimpan semua informasi yang dikembalikan ke pIPAddrTable. Ini adalah model pemrograman umum untuk struktur data dan fungsi jenis ini.
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { free( pIPAddrTable ); pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize ); }
Lakukan panggilan kedua ke GetIpAddrTable dengan pemeriksaan kesalahan umum dan kembalikan nilainya ke variabel DWORDdwRetVal (untuk pemeriksaan kesalahan tingkat lanjut).
if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { printf("GetIpAddrTable call failed with %d\n", dwRetVal); }
Jika panggilan berhasil, akses data dari struktur data pIPAddrTable .
printf("IP Address: %ld\n", pIPAddrTable->table[0].dwAddr); printf("IP Mask: %ld\n", pIPAddrTable->table[0].dwMask); printf("IF Index: %ld\n", pIPAddrTable->table[0].dwIndex); printf("Broadcast Addr: %ld\n", pIPAddrTable->table[0].dwBCastAddr); printf("Re-assembly size: %ld\n", pIPAddrTable->table[0].dwReasmSize);
Bebaskan memori apa pun yang dialokasikan untuk struktur pIPAddrTable .
if (pIPAddrTable) free(pIPAddrTable);
Catatan
Objek DWORDdwAddr dan dwMask dikembalikan sebagai nilai numerik dalam urutan byte host, bukan urutan byte jaringan. Nilai-nilai ini bukan alamat IP putus-putus.
Langkah Selanjutnya: Mengelola Sewa DHCP Menggunakan IpReleaseAddress dan IpRenewAddress
Langkah Sebelumnya: Mengelola Antarmuka Menggunakan GetInterfaceInfo