基于C/C++获取电脑网卡的IP地址信息

目录

前言

一、网卡是什么?

二、实现访问网卡信息

1.引入库及相关的头文件

2.操作网卡数据

3. 完整代码实现

4.结果验证

总结


前言

简单示例如何在windows下使用c/c++代码实现 ipconfig/all 指令


提示:以下是本篇文章正文内容,下面案例可供参考

一、网卡是什么?

       网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。由于其拥有MAC地址,因此属于OSI模型的第1层和2层之间。它使得用户可以通过电缆或无线相互连接。

       每一个网卡都有一个被称为MAC地址的独一无二的48位串行号,它被写在卡上的一块ROM中。在网络上的每一个计算机都必须拥有一个独一无二的MAC地址。

       没有任何两块被生产出来的网卡拥有同样的地址。这是因为电气电子工程师协会(IEEE)负责为网络接口控制器(网卡)销售商分配唯一的MAC地址。

二、实现访问网卡信息

1.引入库及相关的头文件

代码如下(示例):

#include <IPHlpApi.h>
#pragma comment(lib, "Iphlpapi.lib")

2.操作网卡数据

代码如下(示例):

int nRel = 0;  
PIP_ADAPTER_INFO pIpAdapterInfo = (PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO));
unsigned long stSize = sizeof(IP_ADAPTER_INFO);
nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);

结构体ADAPTER_INFO只限制于获取本地计算机网络适配器的IPv4信息,该结构体通过调用GetAdaptersInfo函数获取值。

其中,适配器类型Type字段定义了已获支持的适配器类型如下:

常数

数值

说明

MIB_IF_TYPE_ETHERNET

6

以太网适配器

MIB_IF_TYPE_FDDI

15

FDDI(光纤分布数据接口)适配器

MIB_IF_TYPE_LOOPBACK

24

Loopback适配器

MIB_IF_TYPE_OTHER

1

其他类型的适配器

MIB_IF_TYPE_PPP

23

PPP适配器

MIB_IF_TYPE_SLIP

28

Slip适配器

MIB_IF_TYPE_TOKENRING

9

令牌环适配器

3. 完整代码实现

#include <stdio.h>
#include <WinSock.h>
#include <IPHlpApi.h>
#pragma comment(lib, "Iphlpapi.lib")
int main() {
	char mac[18] = { 0 };
	int netCardNum = 0;
	char temp[4] = { 0 };
	DWORD i = 0;
	PIP_ADAPTER_INFO pIpAdapterInfo = (PIP_ADAPTER_INFO)malloc(sizeof(IP_ADAPTER_INFO));
	unsigned long stSize = sizeof(IP_ADAPTER_INFO);
	int nRel = 0;
	netCardNum = 0;
	nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
	if (ERROR_BUFFER_OVERFLOW == nRel) {
		free(pIpAdapterInfo);
		pIpAdapterInfo = (PIP_ADAPTER_INFO)malloc(stSize);
		nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);
	}
	if (ERROR_SUCCESS == nRel) {
		while (pIpAdapterInfo) {
				printf("%s\n", pIpAdapterInfo->IpAddressList.IpAddress.String);
				pIpAdapterInfo = pIpAdapterInfo->Next;
				netCardNum++;
			}
	 }
	if (pIpAdapterInfo) {
		free(pIpAdapterInfo);
	}
	system("pause");
	return 0;

}

4.结果验证

Microsoft Windows [版本 10.0.19044.2604]
(c) Microsoft Corporation。保留所有权利。
C:\Users\sunsz>ipconfig
Windows IP 配置
无线局域网适配器 本地连接* 8:
   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 本地连接* 12:
   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :
无线局域网适配器 WLAN:
   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::383a:9b03:d0fd:78e2%25
   IPv4 地址 . . . . . . . . . . . . : 192.168.101.134
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.101.1
以太网适配器 以太网 5:
   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::da34:1bdd:97a2:2d1e%17
   IPv4 地址 . . . . . . . . . . . . : 172.168.7.100
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . :
以太网适配器 蓝牙网络连接 2:
   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :
以太网适配器 vEthernet (WLAN):
   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::a33f:509b:ef4d:5b5f%32
   IPv4 地址 . . . . . . . . . . . . : 172.30.192.1
   子网掩码  . . . . . . . . . . . . : 255.255.240.0
   默认网关. . . . . . . . . . . . . :
以太网适配器 vEthernet (以太网 5):
   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::c053:e2cb:7f6d:55b7%65
   IPv4 地址 . . . . . . . . . . . . : 172.30.112.1
   子网掩码  . . . . . . . . . . . . : 255.255.240.0
   默认网关. . . . . . . . . . . . . :
C:\Users\sunsz>

总结

  以上就是代码实现的内容,本文仅仅简单介绍了GetAdaptersInfo的使用。文章来源地址https://uudwc.com/A/xG3qb

原文地址:https://blog.csdn.net/github_37687123/article/details/129296295

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月23日 20:03
【刷题篇】回溯算法(深度优先搜索(一))
下一篇 2023年09月23日 20:08