zoukankan      html  css  js  c++  java
  • Windows获取网络地址、子网掩码等

    include <winsock2.h>

    include <iphlpapi.h>

    include <stdio.h>

    include <stdlib.h>

    pragma comment(lib, "IPHLPAPI.lib")

    define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))

    define FREE(x) HeapFree(GetProcessHeap(), 0, (x))

    /* Note: could also use malloc() and free() */

    int __cdecl main()
    {

    /* Declare and initialize variables */
    

    // It is possible for an adapter to have multiple
    // IPv4 addresses, gateways, and secondary WINS servers
    // assigned to the adapter.
    //
    // Note that this sample code only prints out the
    // first entry for the IP address/mask, and gateway, and
    // the primary and secondary WINS server for each adapter.

    PIP_ADAPTER_INFO pAdapterInfo;
    PIP_ADAPTER_INFO pAdapter = NULL;
    DWORD dwRetVal = 0;
    UINT i;
    

    /* variables used to print DHCP time info */
    struct tm newtime;
    char buffer[32];
    errno_t error;

    ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
    pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
    if (pAdapterInfo == NULL) {
        printf("Error allocating memory needed to call GetAdaptersinfo
    ");
        return 1;
    }
    

    // Make an initial call to GetAdaptersInfo to get
    // the necessary size into the ulOutBufLen variable
    if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
    FREE(pAdapterInfo);
    pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
    if (pAdapterInfo == NULL) {
    printf("Error allocating memory needed to call GetAdaptersinfo ");
    return 1;
    }
    }

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
        pAdapter = pAdapterInfo;
        while (pAdapter) {
            printf("	ComboIndex: 	%d
    ", pAdapter->ComboIndex);
            printf("	Adapter Name: 	%s
    ", pAdapter->AdapterName);
            printf("	Adapter Desc: 	%s
    ", pAdapter->Description);
            printf("	Adapter Addr: 	");
            for (i = 0; i < pAdapter->AddressLength; i++) {
                if (i == (pAdapter->AddressLength - 1))
                    printf("%.2X
    ", (int) pAdapter->Address[i]);
                else
                    printf("%.2X-", (int) pAdapter->Address[i]);
            }
            printf("	Index: 	%d
    ", pAdapter->Index);
            printf("	Type: 	");
            switch (pAdapter->Type) {
            case MIB_IF_TYPE_OTHER:
                printf("Other
    ");
                break;
            case MIB_IF_TYPE_ETHERNET:
                printf("Ethernet
    ");
                break;
            case MIB_IF_TYPE_TOKENRING:
                printf("Token Ring
    ");
                break;
            case MIB_IF_TYPE_FDDI:
                printf("FDDI
    ");
                break;
            case MIB_IF_TYPE_PPP:
                printf("PPP
    ");
                break;
            case MIB_IF_TYPE_LOOPBACK:
                printf("Lookback
    ");
                break;
            case MIB_IF_TYPE_SLIP:
                printf("Slip
    ");
                break;
            default:
                printf("Unknown type %ld
    ", pAdapter->Type);
                break;
            }
    
            printf("	IP Address: 	%s
    ",
                   pAdapter->IpAddressList.IpAddress.String);
            printf("	IP Mask: 	%s
    ", pAdapter->IpAddressList.IpMask.String);
    
            printf("	Gateway: 	%s
    ", pAdapter->GatewayList.IpAddress.String);
            printf("	***
    ");
    
            if (pAdapter->DhcpEnabled) {
                printf("	DHCP Enabled: Yes
    ");
                printf("	  DHCP Server: 	%s
    ",
                       pAdapter->DhcpServer.IpAddress.String);
    
                printf("	  Lease Obtained: ");
                /* Display local time */
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
                if (error)
                    printf("Invalid Argument to _localtime32_s
    ");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s
    ");
                    else
                        /* asctime_s returns the string terminated by 
     */
                        printf("%s", buffer);
                }
    
                printf("	  Lease Expires:  ");
                error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseExpires);
                if (error)
                    printf("Invalid Argument to _localtime32_s
    ");
                else {
                    // Convert to an ASCII representation 
                    error = asctime_s(buffer, 32, &newtime);
                    if (error)
                        printf("Invalid Argument to asctime_s
    ");
                    else
                        /* asctime_s returns the string terminated by 
     */
                        printf("%s", buffer);
                }
            } else
                printf("	DHCP Enabled: No
    ");
    
            if (pAdapter->HaveWins) {
                printf("	Have Wins: Yes
    ");
                printf("	  Primary Wins Server:    %s
    ",
                       pAdapter->PrimaryWinsServer.IpAddress.String);
                printf("	  Secondary Wins Server:  %s
    ",
                       pAdapter->SecondaryWinsServer.IpAddress.String);
            } else
                printf("	Have Wins: No
    ");
            pAdapter = pAdapter->Next;
            printf("
    ");
        }
    } else {
        printf("GetAdaptersInfo failed with error: %d
    ", dwRetVal);
    
    }
    if (pAdapterInfo)
        FREE(pAdapterInfo);
    
    return 0;
    

    }

  • 相关阅读:
    Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常
    BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
    Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
    Codeforces 316G3 Good Substrings 字符串 SAM
    Codechef CHSIGN Change the Signs(May Challenge 2018) 动态规划
    BZOJ1396 识别子串 字符串 SAM 线段树
    CodeForces 516C Drazil and Park 线段树
    CodeForces 516B Drazil and Tiles 其他
    CodeForces 516A Drazil and Factorial 动态规划
    SPOJ LCS2
  • 原文地址:https://www.cnblogs.com/Dennis-mi/p/12273505.html
Copyright © 2011-2022 走看看