zoukankan      html  css  js  c++  java
  • 获取本机网卡信息


    /*
    获取本地ip地址,子网掩码,默认网关,mac地址,网络适配器信息,hostname,域名 dns,网络接口信息 */ #include<WinSock2.h> #include<IPHlpApi.h> #include<stdio.h> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"iphlpapi.lib") void main() { /* typedef struct _IP_ADAPTER_INFO { struct _IP_ADAPTER_INFO* Next; DWORD ComboIndex; char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; UINT AddressLength; BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; DWORD Index; UINT Type; UINT DhcpEnabled; PIP_ADDR_STRING CurrentIpAddress; IP_ADDR_STRING IpAddressList; IP_ADDR_STRING GatewayList; IP_ADDR_STRING DhcpServer; BOOL HaveWins; IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; time_t LeaseObtained; time_t LeaseExpires; } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; */ IP_ADAPTER_INFO* pAdapterInfo; PIP_ADAPTER_INFO pAdapter; ULONG bufferLength; DWORD status; pAdapterInfo = (IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO)); bufferLength = sizeof(IP_ADAPTER_INFO); //根据该函数先故意失败获取,得到链表真正大小 if (GetAdaptersInfo(pAdapterInfo, &bufferLength)!=ERROR_SUCCESS) { free(pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO*)malloc(bufferLength); } //获取网卡信息结构体第一个节点. if (GetAdaptersInfo(pAdapterInfo, &bufferLength) != ERROR_SUCCESS) { printf("error "); } //因为网卡之间链接成一个单链表,通过一个指针遍历该链表 pAdapter = pAdapterInfo; while (pAdapter) { printf("网卡名: %s ", pAdapter->AdapterName); printf("网卡描述: %s ", pAdapter->Description); printf("网卡MAC地址: "); for (int 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("ip地址: %s ", pAdapter->IpAddressList.IpAddress.String); printf("子网掩码: %s ", pAdapter->IpAddressList.IpMask.String); printf("网关: %s ", pAdapter->GatewayList.IpAddress.String); if (pAdapter->DhcpEnabled) { printf("启用DHCP: 是 "); printf("DHCP服务器地址: %s ", pAdapter->DhcpServer.IpAddress.String); } else { printf("启用DHCP: 否 "); } pAdapter = pAdapter->Next; } if (pAdapterInfo) free(pAdapterInfo); getchar(); }

    获取dns相关信息:

    #include<WinSock2.h>
    #include<IPHlpApi.h>
    #include<stdio.h>
    
    
    #pragma comment(lib,"ws2_32.lib")
    #pragma comment(lib,"iphlpapi.lib")
    
    
    void main()
    {    
           ULONG bufferLength;
        DWORD status;
    
        FIXED_INFO* fixedInfo;
        IP_ADDR_STRING* pIpAddr;
        /*
        typedef struct {
        char HostName[MAX_HOSTNAME_LEN + 4] ;
        char DomainName[MAX_DOMAIN_NAME_LEN + 4];
        PIP_ADDR_STRING CurrentDnsServer;
        IP_ADDR_STRING DnsServerList;
        UINT NodeType;
        char ScopeId[MAX_SCOPE_ID_LEN + 4];
        UINT EnableRouting;
        UINT EnableProxy;
        UINT EnableDns;
        } FIXED_INFO_W2KSP1, *PFIXED_INFO_W2KSP1;
        */
    
        fixedInfo = (FIXED_INFO*)GlobalAlloc(GPTR, sizeof(FIXED_INFO));
        bufferLength = sizeof(FIXED_INFO);
        if (ERROR_BUFFER_OVERFLOW == GetNetworkParams(fixedInfo, &bufferLength))
        {
            GlobalFree(fixedInfo);
            fixedInfo = (FIXED_INFO*)GlobalAlloc(GPTR, sizeof(FIXED_INFO));
        }
        if (GetNetworkParams(fixedInfo, &bufferLength) != ERROR_SUCCESS)
        {
            printf("error
    ");
        }
        else
        {
            printf("主机名: %s
    ", fixedInfo->HostName);
            printf("域名: %s
    ", fixedInfo->HostName);
            char* nodeType;
            switch (fixedInfo->NodeType)
            {
            case BROADCAST_NODETYPE:
                nodeType = "broadcase node";
                break;
            case PEER_TO_PEER_NODETYPE:
                nodeType = "peertopeer node";
                break;
            case MIXED_NODETYPE:
                nodeType = "mixed node";
                break;
            case HYBRID_NODETYPE:
                nodeType = "hybrid node";
                break;
            default:
                nodeType = "unkowntype node";
                break;
            }
            printf("节点类型    %d - %s
    ", fixedInfo->NodeType, nodeType);
            printf("是否启用路由功能     %s
    ", fixedInfo->EnableRouting ? "" : "");
            printf("是否启用arp代理功能     %s
    ", fixedInfo->EnableProxy ? "" : "");
            printf("是否启用dns服务器     %s
    ", fixedInfo->EnableDns ? "" : "");
            printf("dns服务器列表
    ");
            printf("%s
    ", fixedInfo->DnsServerList.IpAddress.String);
            pIpAddr = fixedInfo->DnsServerList.Next;
            while (pIpAddr)
            {
                printf("%s
    ", pIpAddr->IpAddress.String);
                pIpAddr = pIpAddr->Next;
            }
    
        }
        getchar();
    
    
    
    
    
    }

    获取网络接口数量API: GetNumberOfInterfaces(pdwNumIf)

  • 相关阅读:
    Spark——为数据分析处理提供更为灵活的赋能
    秋读|10本热门图书(人工智能、编程开发、架构、区块链等)免费送!
    使用Phaser开发你的第一个H5游戏(一)
    Java web 服务启动时Xss溢出异常处理笔记
    为什么我打的jar包没有注解?
    收集、分析线上日志数据实战——ELK
    阿里云PolarDB及其共享存储PolarFS技术实现分析(下)
    14.5 富文本编辑【JavaScript高级程序设计第三版】
    【收藏】15个常用的javaScript正则表达式
    C# 网络请求
  • 原文地址:https://www.cnblogs.com/freesec/p/6193957.html
Copyright © 2011-2022 走看看