目录
前言
一、网卡是什么?
二、实现访问网卡信息
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>
文章来源:https://www.toymoban.com/news/detail-720053.html
总结
以上就是代码实现的内容,本文仅仅简单介绍了GetAdaptersInfo
的使用。文章来源地址https://www.toymoban.com/news/detail-720053.html
到了这里,关于基于C/C++获取电脑网卡的IP地址信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!