使用 GetIpAddrTable 管理 IP 位址
GetIpAddrTable 函式會填入 MIB_IPADDRTABLE 結構的指標,其中包含與系統相關聯之目前 IP 位址的相關信息。
使用 GetIpAddrTable
宣告一個指向 MIB_IPADDRTABLE物件的指標,名為 pIPAddrTable ,以及一個名為 dwSize 的 DWORD 物件。 這些變數會當做參數傳遞至 getIpAddrTable函式。 請同時建立一個名為 dwRetVal 的 DWORD 變數(用於錯誤檢查)。
MIB_IPADDRTABLE *pIPAddrTable; DWORD dwSize = 0; DWORD dwRetVal;
為結構分配記憶體。
注意
dwSize 的大小不足以保存資訊。 請參閱下一個步驟。
pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
對 getIpAddrTable 進行初始呼叫,以取得 dwSize 變數所需的大小。
注意
此函式呼叫原本就預期會失敗,其目的是確保變數 dwSize 指定的大小足以容納所有傳回到 pIPAddrTable的資訊。 這是此類型之數據結構和函式的常見程序設計模型。
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { free( pIPAddrTable ); pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize ); }
對 getIpAddrTable 進行第二次呼叫,並檢查一般錯誤,並將其值傳回至 DWORD 變數 dwRetVal (如需更進階的錯誤檢查)。
if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { printf("GetIpAddrTable call failed with %d\n", dwRetVal); }
如果呼叫成功,請從 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);
釋放 pIPAddrTable 結構所分配的所有記憶體。
if (pIPAddrTable) free(pIPAddrTable);
注意
DWORD 物件 dwAddr 和 dwMask 會以主機位元組順序傳回為數值,而不是網路位元組順序。 這些值不是虛線IP位址。
下一個步驟:使用 IpReleaseAddress 和 IpRenewAddress 管理 DHCP 租用
上一個步驟:使用 GetInterfaceInfo 管理介面