GetIpAddrTable を使用した IP アドレスの管理
GetIpAddrTable 関数は、システムに関連付けられている現在の IP アドレスに関する情報をMIB_IPADDRTABLE構造体へのポインターに入力します。
GetIpAddrTable を使用するには
pIPAddrTable というMIB_IPADDRTABLE オブジェクトへのポインターと、dwSize という DWORD オブジェクトへのポインターを宣言します。 これらの変数は、 GetIpAddrTable 関数にパラメーターとして渡されます。 また、dwRetVal という名前の DWORD 変数を作成します (エラー チェックに使用されます)。
MIB_IPADDRTABLE *pIPAddrTable; DWORD dwSize = 0; DWORD dwRetVal;
構造体にメモリを割り当てます。
Note
dwSize のサイズは、情報を保持するのに十分ではありません。 次のステップを参照してください。
pIPAddrTable = (MIB_IPADDRTABLE*) malloc( sizeof(MIB_IPADDRTABLE) );
GetIpAddrTable を最初に呼び出して、dwSize 変数に必要なサイズを取得します。
Note
この関数の呼び出しは失敗することを目的としており、 dwSize 変数が pIPAddrTable に返されるすべての情報を保持するのに十分なサイズを指定するために使用されます。 これは、この型のデータ構造と関数の一般的なプログラミング モデルです。
if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { free( pIPAddrTable ); pIPAddrTable = (MIB_IPADDRTABLE *) malloc ( dwSize ); }
一般的なエラー チェックを使用して GetIpAddrTable を 2 回目に呼び出し、その値を 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);
Note
DWORD オブジェクト dwAddr と dwMask は、ネットワーク のバイト順ではなく、ホストのバイト順に数値として返されます。 これらの値は、ドット付き IP アドレスではありません。
次の手順: IpReleaseAddress と IpRenewAddress を使用した DHCP リースの管理
前の手順: GetInterfaceInfo を使用したインターフェイスの管理