• 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;
    

    }

  • 相关阅读:
    我喜欢的电影
    QObject
    python-类
    pycharm活动模板
    pyqt5模块介绍
    第九章第四节 流体压强与流速的关系
    开源的推荐系统
    VNote: 一个舒适的Markdown笔记软件
    jira项目管理平台搭建
    Win10环境下,告别MarkdownPad,用Notepad++搭建编写md文档的环境
  • 原文地址:https://www.cnblogs.com/Dennis-mi/p/12273505.html
Copyright © 2020-2023  润新知