使用 GetIpAddrTable 管理 IP 位址
GetIpAddrTable函式會填入MIB_IPADDRTABLE結構的指標,其中包含與系統相關聯之目前 IP 位址的相關資訊。
使用 GetIpAddrTable
宣告名為pIPAddrTableMIB_IPADDRTABLE物件的指標,以及名為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 管理介面