C++ C+中的网络适配器信息+;

C++ C+中的网络适配器信息+;,c++,windows,networking,C++,Windows,Networking,在Windows 8上,我是否可以在C中使用任何标准函数来获取系统中处理以太网的每个网络接口卡的IP地址和网络掩码列表?我能想到的其他方法是通过解析 IPCOFIGG的输出,但我真的不想沿着C++的路径走下去。 < P>微软有一个叫做“调用”的东西。他们的文档非常详尽,页面中包含一些基本示例 以下是一个例子: 编辑:在XP和更高版本上,getAdapterInfo()已被弃用,请改用(归功于Remy Lebeau) 还有GetInterfaceInfo等等。@keyser如果你能用一些使用IP

在Windows 8上,我是否可以在C中使用任何标准函数来获取系统中处理以太网的每个网络接口卡的IP地址和网络掩码列表?我能想到的其他方法是通过解析<代码> IPCOFIGG的输出,但我真的不想沿着C++的路径走下去。

< P>微软有一个叫做“调用”的东西。他们的文档非常详尽,页面中包含一些基本示例

以下是一个例子:


编辑:在XP和更高版本上,
getAdapterInfo()
已被弃用,请改用(归功于Remy Lebeau)


还有
GetInterfaceInfo
等等。

@keyser如果你能用一些使用IP Helper的代码来回答,那么我很乐意接受。getaddrinfo(3)会有帮助吗?@user3813353不会,因为我使用的是Windows而不是Linux。我的程序只需要知道每个以太网适配器的IP地址和网络掩码。您可以编辑代码以显示如何检索这些信息吗?我使用
getAdapterInfo
添加了一些示例代码,但您可能应该浏览一下文档。谢谢!我认为最上面的代码示例就是我所需要的。在XP和更高版本上,
getAdapterInfo()
已被弃用,请改用。
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
while (pAdapter) {
    printf("Adapter Name: %s\n", pAdapter->AdapterName);
    printf("Adapter Desc: %s\n", pAdapter->Description);
    printf("\tAdapter Addr: \t");
    for (UINT i = 0; i < pAdapter->AddressLength; i++) {
        if (i == (pAdapter->AddressLength - 1))
            printf("%.2X\n",(int)pAdapter->Address[i]);
        else
            printf("%.2X-",(int)pAdapter->Address[i]);
    }
    printf("IP Address: %s\n", pAdapter->IpAddressList.IpAddress.String);
    printf("IP Mask: %s\n", pAdapter->IpAddressList.IpMask.String);
    printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
    printf("\t***\n");
    if (pAdapter->DhcpEnabled) {
        printf("\tDHCP Enabled: Yes\n");
        printf("\t\tDHCP Server: \t%s\n", pAdapter->DhcpServer.IpAddress.String);
    }
    else
      printf("\tDHCP Enabled: No\n");

  pAdapter = pAdapter->Next;
}
    FIXED_INFO *pFixedInfo;
    IP_ADDR_STRING *pIPAddr;

    ULONG ulOutBufLen;
    DWORD dwRetVal;

    pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO));
    ulOutBufLen = sizeof (FIXED_INFO);

    if (GetNetworkParams(pFixedInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
        free(pFixedInfo);
        pFixedInfo = (FIXED_INFO *) malloc(ulOutBufLen);
        if (pFixedInfo == NULL) {
            printf("Error allocating memory needed to call GetNetworkParams\n");
        }
    }

   printf("\tHost Name: %s\n", pFixedInfo->HostName);
        printf("\tDomain Name: %s\n", pFixedInfo->DomainName);
        printf("\tDNS Servers:\n");
        printf("\t\t%s\n", pFixedInfo->DnsServerList.IpAddress.String);

        pIPAddr = pFixedInfo->DnsServerList.Next;
        while (pIPAddr) {
            printf("\t\t%s\n", pIPAddr->IpAddress.String);
            pIPAddr = pIPAddr->Next;
        }

        printf("\tNode Type: ");
        switch (pFixedInfo->NodeType) {
        case 1:
            printf("%s\n", "Broadcast");
            break;
        case 2:
            printf("%s\n", "Peer to peer");
            break;
        case 4:
            printf("%s\n", "Mixed");
            break;
        case 8:
            printf("%s\n", "Hybrid");
            break;
        default:
            printf("\n");
        }

        printf("\tNetBIOS Scope ID: %s\n", pFixedInfo->ScopeId);

        if (pFixedInfo->EnableRouting)
            printf("\tIP Routing Enabled: Yes\n");
        else
            printf("\tIP Routing Enabled: No\n");

        if (pFixedInfo->EnableProxy)
            printf("\tWINS Proxy Enabled: Yes\n");
        else
            printf("\tWINS Proxy Enabled: No\n");

        if (pFixedInfo->EnableDns)
            printf("\tNetBIOS Resolution Uses DNS: Yes\n");
        else
            printf("\tNetBIOS Resolution Uses DNS: No\n");