共用方式為


使用 GetIpAddrTable 管理 IP 位址

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

使用 GetIpAddrTable

  1. 宣告名為pIPAddrTableMIB_IPADDRTABLE物件的指標,以及名為dwSizeDWORD物件。 這些變數會當做參數傳遞至 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 管理介面