【网络编程】获取本机所有网卡(包括虚拟网卡)的列表和信息

一、获取本机所有网卡(包括虚拟网卡)的列表和信息

【网络编程】获取本机子网IP地址和子网掩码
博客中介绍了GetAdaptersInfo这个函数,并且通过它获取了本机的子网IP和子网掩码。 除此之外,这个函数中指针指向的结构体内部也同样存在网卡的信息,具体代码如下:


//获取本机物理网卡地址信息

void Test3() {
	ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
	PIP_ADAPTER_INFO AdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen);

	DWORD dwRetVal = GetAdaptersInfo(AdapterInfo, &ulOutBufLen);

	if (dwRetVal == ERROR_BUFFER_OVERFLOW) {
		free(AdapterInfo);
		AdapterInfo = (IP_ADAPTER_INFO*)malloc(ulOutBufLen);

		dwRetVal = GetAdaptersInfo(AdapterInfo, &ulOutBufLen);
	}

	if (dwRetVal == NO_ERROR) {
		IP_ADAPTER_INFO* pAdapter = AdapterInfo;
		while (pAdapter != NULL) {
			std::cout << "---------------------------------------------" << std::endl;
			std::cout << "AdapterName = " << pAdapter->AdapterName << std::endl;
			std::cout << "Description = " << pAdapter->Description << std::endl;

			//物理网卡地址信息
			printf("MAC:\t");
			for (UINT i = 0; i < pAdapter->AddressLength; ++i) {
				printf("%X", pAdapter->Address[i]); //十六进制输出

				std::cout << (i == pAdapter->AddressLength - 1 ? '\n' : '-');
			}

			//其他信息
			std::cout << "AdapterType = " << pAdapter->Type << std::endl;


			//IP地址

			std::cout << "--------------------------" << std::endl;
			IP_ADAPTER_INFO* pIpAddr = AdapterInfo;
			while (pIpAddr) {
				std::cout << "IpAddress = " << pIpAddr->IpAddressList.IpAddress.String << std::endl;
				std::cout << "IpMask = " << pIpAddr->IpAddressList.IpMask.String << std::endl;

				pIpAddr = pIpAddr->Next;
			}
			std::cout << "--------------------------" << std::endl;

			//网关
			PIP_ADDR_STRING pGateAwayList = &pAdapter->GatewayList;
			while (pGateAwayList) {
				std::cout << "GateAwayAddr:" << pGateAwayList->IpAddress.String << std::endl;
				pGateAwayList = pGateAwayList->Next;
			}

			pAdapter = pAdapter->Next;
			std::cout << std::endl;
		}

	}
	else {
		std::cerr << "获取网络适配器信息出错: " << dwRetVal << std::endl;

	}

	if (AdapterInfo != NULL) {
		free(AdapterInfo);
	}

}

可以发现,包括虚拟机的网卡在内的网卡信息被成功打印了:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值