⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipconfigv6.cpp

📁 这个是网络编程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                        case 'm':
                            Flags |= GAA_FLAG_SKIP_MULTICAST;
                            break;
                        default:
                            usage(argv[0]);
                            break;
                    }
                    break;
                default:
                    usage(argv[0]);
                    break;
            }
        }
    }

    //
    // Get the main IP configuration information for this machine using a FIXED_INFO structure
    //
    if ((Err = GetNetworkParams(NULL, &FixedInfoSize)) != 0)
    {
        if ((Err != ERROR_BUFFER_OVERFLOW) && (Err != ERROR_INSUFFICIENT_BUFFER))
        {
            printf("GetNetworkParams sizing failed with error %d\n", Err);
            return -1;
        }
    }

    // Allocate memory from sizing information
    if ((pFixedInfo = (PFIXED_INFO) GlobalAlloc(GPTR, FixedInfoSize)) == NULL)
    {
        printf("Memory allocation error\n");
        return -1;
    }

    // Print the fixed network parameters
    if ((Err = GetNetworkParams(pFixedInfo, &FixedInfoSize)) == 0)
    {
        printf("\tHost Name . . . . . . . . . : %s\n", pFixedInfo->HostName);
        printf("\tDomain Name . . . . . . . . : %s\n", pFixedInfo->DomainName);
        printf("\tDNS Servers . . . . . . . . : %s\n", pFixedInfo->DnsServerList.IpAddress.String);
        pAddrStr = pFixedInfo->DnsServerList.Next;
        while(pAddrStr)
        {
            printf("                                      %-15s\n", pAddrStr->IpAddress.String);
            pAddrStr = pAddrStr->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);
        printf("\tIP Routing Enabled. . . . . : %s\n", (pFixedInfo->EnableRouting ? "yes" : "no"));
        printf("\tWINS Proxy Enabled. . . . . : %s\n", (pFixedInfo->EnableProxy ? "yes" : "no"));
        printf("\tNetBIOS Resolution Uses DNS : %s\n", (pFixedInfo->EnableDns ? "yes" : "no"));
    } else
    {
        printf("GetNetworkParams failed with error %d\n", Err);
        return -1;
    }

    //
    // Enumerate all of the adapter specific information using the 
    // IP_ADAPTER_ADDRESSES structure.
    // Note:  IP_ADAPTER_INFO contains a linked list of adapter entries.
    //
    AdapterAddrsSize = 0;
    if ((Err = GetAdaptersAddresses(af, Flags, NULL, NULL, &AdapterAddrsSize)) != 0)
    {
        if ((Err != ERROR_BUFFER_OVERFLOW) && (Err != ERROR_INSUFFICIENT_BUFFER))
        {
            printf("GetAdaptersAddresses sizing failed with error %d\n", Err);
            printf("err = %d; AdapterAddrsSize = %d\n", Err, AdapterAddrsSize);
            return -1;
        }
    }

    // Allocate memory from sizing information
    if ((pAdapterAddrs = (PIP_ADAPTER_ADDRESSES) GlobalAlloc(GPTR, AdapterAddrsSize)) == NULL)
    {
        printf("Memory allocation error\n");
        return -1;
    }

    // Get actual adapter information
    if ((Err = GetAdaptersAddresses(af, Flags, NULL, pAdapterAddrs, &AdapterAddrsSize)) != ERROR_SUCCESS)
    {
        printf("GetAdaptersAddresses failed with error %d\n", Err);
        return -1;
    }

    // Enumerate through each retuned adapter and print its information
    pAdapt = pAdapterAddrs;
    while (pAdapt)
    {
        printf("\n");
        printf("\tDescription  : %S\n", pAdapt->Description);
        printf("\t   Adapter Name : %s\n", pAdapt->AdapterName);

        printf("\t   DNS Suffix   : %S\n", pAdapt->DnsSuffix);
        printf("\t   Friendly Name: %S\n", pAdapt->FriendlyName);

        FormatPhysicalAddress(pAdapt->PhysicalAddress, pAdapt->PhysicalAddressLength, buf, buflen);
        printf("\t   Physical Addr: %s\n", buf);

        printf("\t   MTU . . . . . . . . . . : %d\n",  pAdapt->Mtu);
        FormatAdapterType(pAdapt->IfType, buf, buflen);
        printf("\t   Interface Type  . . . . : %s\n",  buf);
        printf("\t   Interface Index:  . . . : %d\n",  pAdapt->IfIndex);

        printf("\t   Flags:  . . . . . . . . : ");
        bIndent = FALSE;
        if (pAdapt->Flags & IP_ADAPTER_DDNS_ENABLED)
        {
            printf("DDNS Enabled\n");
            bIndent = TRUE;
        }
        if (pAdapt->Flags & IP_ADAPTER_REGISTER_ADAPTER_SUFFIX)
        {
            if (bIndent == TRUE)
                printf("\t                          ");
            printf("Register DNS Adapter Suffix\n");
            bIndent = TRUE;
        }
        if (pAdapt->Flags & IP_ADAPTER_DHCP_ENABLED)
        {
            if (bIndent == TRUE)
                printf("\t                          ");
            printf("DHCP Enabled\n");
            bIndent = TRUE;
        }

        pUnicastAddress = pAdapt->FirstUnicastAddress;
        if (pUnicastAddress)
            printf("\t   UNICAST ADDRESS(ES):\n");
        while (pUnicastAddress)
        {
            printf("\t      Flags:  . . . . . . . . : ");
            if (pUnicastAddress->Flags == 0)
                printf("None");
            if ((pUnicastAddress->Flags & IP_ADAPTER_ADDRESS_DNS_ELIGIBLE) == IP_ADAPTER_ADDRESS_DNS_ELIGIBLE)
                printf("DNS_ELIGIBLE ");
            if ((pUnicastAddress->Flags & IP_ADAPTER_ADDRESS_TRANSIENT) == IP_ADAPTER_ADDRESS_TRANSIENT)
                printf("TRANSIENT");
            printf("\n");

            dwAddressLen = 128;
            memset(szAddress, 0, 128);
            if (WSAAddressToStringA(
                pUnicastAddress->Address.lpSockaddr,
                pUnicastAddress->Address.iSockaddrLength,
                NULL,
                szAddress,
                &dwAddressLen) == SOCKET_ERROR)
            {
                printf("WSAAddressToString failed:% d\n", WSAGetLastError());
            }
            printf("\t      Address:  . . . . . . . : %s\n", szAddress);

            printf("\t      Valid Lifetime  . . . . : %lu\n", pUnicastAddress->ValidLifetime);
            printf("\t      Preferred Lifetime: . . : %lu\n", pUnicastAddress->PreferredLifetime);
            printf("\t      Lease Lifetime: . . . . : %lu\n", pUnicastAddress->LeaseLifetime);
            printf("\t      Prefix Origin:  . . . . : %s\n",  PrefixOriginStr[pUnicastAddress->PrefixOrigin]);
            printf("\t      Suffix Origin:  . . . . : %s\n",  SuffixOriginStr[pUnicastAddress->SuffixOrigin]);
            printf("\t      Dad State:  . . . . . . : %s\n",  DadStateStr[pUnicastAddress->DadState]);

            pUnicastAddress = pUnicastAddress->Next;
            printf("\n");
        }
        //
        // Print anycast addresses
        //
        pAnycastAddress = pAdapt->FirstAnycastAddress;
        if (pAnycastAddress)
            printf("\t   ANYCAST ADDRESS(ES):\n");
        while (pAnycastAddress)
        {
            dwAddressLen = 128;
            memset(szAddress, 0, 128);
            if (WSAAddressToStringA(
                pAnycastAddress->Address.lpSockaddr,
                pAnycastAddress->Address.iSockaddrLength,
                NULL,
                szAddress,
                &dwAddressLen) == SOCKET_ERROR)
            {
                printf("WSAAddressToString failed:% d\n", WSAGetLastError());
            }
            printf("\t      Address:  . . . . . . . : %s\n", szAddress);
            printf("\t      Flags:  . . . . . . . . : "); //lu\n", pAnycastAddress->Flags);
            if (pAnycastAddress->Flags == 0)
                printf("None");
            else if ((pAnycastAddress->Flags & IP_ADAPTER_ADDRESS_DNS_ELIGIBLE) == IP_ADAPTER_ADDRESS_DNS_ELIGIBLE)
                printf("DNS_ELIGIBLE ");
            else if ((pAnycastAddress->Flags & IP_ADAPTER_ADDRESS_TRANSIENT) == IP_ADAPTER_ADDRESS_TRANSIENT)
                printf("TRANSIENT");
            printf("\n");

            pAnycastAddress = pAnycastAddress->Next;
        }
        //
        // Print multicast addresses
        //
        pMulticastAddress = pAdapt->FirstMulticastAddress;
        if (pMulticastAddress)
            printf("\t   MULTICAST ADDRESS(ES):\n", pAdapt->FirstMulticastAddress);
        while (pMulticastAddress)
        {
            dwAddressLen = 128;
            memset(szAddress, 0, 128);
            if (WSAAddressToStringA(
                pMulticastAddress->Address.lpSockaddr,
                pMulticastAddress->Address.iSockaddrLength,
                NULL,
                szAddress,
                &dwAddressLen) == SOCKET_ERROR)
            {
                printf("WSAAddressToString failed:% d\n", WSAGetLastError());
            }
            printf("\t      Address:  . . . . . . . : %s\n", szAddress);
            printf("\t      Flags:  . . . . . . . . : ");
            if (pMulticastAddress->Flags == 0)
                printf("None");
            else if ((pMulticastAddress->Flags & IP_ADAPTER_ADDRESS_DNS_ELIGIBLE) == IP_ADAPTER_ADDRESS_DNS_ELIGIBLE)
                printf("DNS_ELIGIBLE ");
            else if ((pMulticastAddress->Flags & IP_ADAPTER_ADDRESS_TRANSIENT) == IP_ADAPTER_ADDRESS_TRANSIENT)
                printf("TRANSIENT");
            printf("\n");

            pMulticastAddress = pMulticastAddress->Next;
        }

        pAdapt = pAdapt->Next;
    }
    WSACleanup();

    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -