Bagikan melalui


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

  1. 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;
    
    
  2. Alokasikan memori untuk struktur.

    Catatan

    Ukuran dwSize tidak cukup untuk menyimpan informasi. Lihat langkah selanjutnya.

     

    pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
    
    
  3. 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 );
    }
    
    
  4. 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);
    }
    
    
  5. 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);
    
    
  6. 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