共用方式為


使用 GetIpAddrTable 管理 IP 位址

GetIpAddrTable 函式會填入 MIB_IPADDRTABLE 結構的指標,其中包含與系統相關聯之目前 IP 位址的相關信息。

使用 GetIpAddrTable

  1. 宣告一個指向 MIB_IPADDRTABLE物件的指標,名為 pIPAddrTable ,以及一個名為 dwSize 的 DWORD 物件。 這些變數會當做參數傳遞至 getIpAddrTable函式。 請同時建立一個名為 dwRetValDWORD 變數(用於錯誤檢查)。

    MIB_IPADDRTABLE  *pIPAddrTable;
    DWORD            dwSize = 0;
    DWORD            dwRetVal;
    
    
  2. 為結構分配記憶體。

    注意

    dwSize 的大小不足以保存資訊。 請參閱下一個步驟。

     

    pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
    
    
  3. 對 getIpAddrTable 進行初始呼叫,以取得 dwSize 變數所需的大小。

    注意

    此函式呼叫原本就預期會失敗,其目的是確保變數 dwSize 指定的大小足以容納所有傳回到 pIPAddrTable的資訊。 這是此類型之數據結構和函式的常見程序設計模型。

     

    if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) {
        free( pIPAddrTable );
        pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize );
    }
    
    
  4. 對 getIpAddrTable 進行第二次呼叫,並檢查一般錯誤,並將其值傳回至 DWORD 變數 dwRetVal (如需更進階的錯誤檢查)。

    if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { 
        printf("GetIpAddrTable call failed with %d\n", dwRetVal);
    }
    
    
  5. 如果呼叫成功,請從 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. 釋放 pIPAddrTable 結構所分配的所有記憶體。

    if (pIPAddrTable)
            free(pIPAddrTable);
    
    

注意

DWORD 物件 dwAddrdwMask 會以主機位元組順序傳回為數值,而不是網路位元組順序。 這些值不是虛線IP位址。

 

下一個步驟:使用 IpReleaseAddress 和 IpRenewAddress 管理 DHCP 租用

上一個步驟:使用 GetInterfaceInfo 管理介面