目录
前言
一、网卡是什么?
二、实现访问网卡信息
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
的使用。