使用 GetIpAddrTable 管理 IP 地址

GetIpAddrTable 函数使用与系统关联的当前 IP 地址的信息填充指向MIB_IPADDRTABLE结构的指针。

使用 GetIpAddrTable

  1. 声明指向名为 pIPAddrTable的 MIB_IPADDRTABLE 对象的指针,以及名为 dwSize 的DWORD 对象。 这些变量作为参数传递给 GetIpAddrTable 函数。 此外,创建名为 dwRetVal (的 DWORD 变量,用于) 进行错误检查。

    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 管理接口