获取本机网卡信息

摘要:
=ERROR_SUCCESS){free;pAdapterInfo=malloc;}//获取网卡信息结构体第一个节点.if(GetAdaptersInfo(pAdapterInfo,&bufferLength)!

/*
获取本地ip地址,子网掩码,默认网关,mac地址,网络适配器信息,hostname,域名 dns,网络接口信息 */#include<WinSock2.h>#include<IPHlpApi.h>#include<stdio.h> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"iphlpapi.lib") voidmain() { /*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]); elseprintf("%.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")


voidmain()
{    
       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)
        {
        caseBROADCAST_NODETYPE:
            nodeType = "broadcase node";
            break;
        casePEER_TO_PEER_NODETYPE:
            nodeType = "peertopeer node";
            break;
        caseMIXED_NODETYPE:
            nodeType = "mixed node";
            break;
        caseHYBRID_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)

免责声明:文章转载自《获取本机网卡信息》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[UE4]RichTextBlockVSCode:如何对搜索结果同时选中并编辑下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c语言获取linux的CPU、内存、IO、磁盘、网速(本机编译通过)

代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #define MAXBUFSIZE 1024 #define WAIT...

C 面向对象编程 --- 一模块的串口协议解析

// 任务目的// 解析串口收到的54个字节。这54个字节包含了8个车道的5大信息以及校验信息。// 实现了查询每条车道包含了哪些信息。 #include <stdio.h> #include <malloc.h> #include <assert.h> typedef unsigned char mybool;...

《SED 单行脚本快速参考》的 awk 实现

http://linuxtoy.org/archives/sed-awk.html { 撰文/bones7456} sed 和 awk 都是 Linux 下常用的流编辑器,他们各有各的特色,本文并不是要做什么对比,而是权当好玩,把《SED 单行脚本快速参考》这文章,用 awk 做了一遍~ 至于孰好孰坏,那真是很难评论了。一般来说,sed 的命令会更短小一些...

openssl多线程实例

本示例用多线程实现了一个ssl服务端和一个客户端。 服务端代码如下: #include <stdio.h> #include <stdlib.h> #include <memory.h> #include <errno.h> #ifndef _WIN32 #include <sys/types.h>...

分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容

分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容 在写JS的过程中,为了调试我们常常会 写很多 console.log、console.info、console.group、console.warn、console.error代码来查看JS 的运行情况,但发布时又因为IE不支持console,又要去掉这些代码,一不小心就会出错 问题...

icmp 流量抓取 转发 代理(2)

客户端C到服务器S的icmp包经过本机P时被截获,在上一篇中已经介绍了如何获取原始目的地址,你必须将数据转发到原始目的地址S,并且在收到从原始目的地址的响应之后转发给客户端。此时,要实现透明代理,则你返回给客户端的icmp响应的源地址必须为客户端请求的原始目的地址S。由于使用的是raw socket,无法用IP_TRANSPARENT的socket选项绑定...