使用 GetIpAddrTable 管理 IP 地址
GetIpAddrTable 函数使用与系统关联的当前 IP 地址的信息填充指向MIB_IPADDRTABLE结构的指针。
使用 GetIpAddrTable
声明指向名为 pIPAddrTable的 MIB_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 租约