【获取网卡别名】

网卡别名就是网卡上显示的名字,如下图所示的VMnet0,VMnet1,本地连接,以太网,以太网2等,那么该如何获取网卡的别名呢?

在这里插入图片描述
代码如下所示,主要思路是,首先获得网卡的AdapterName,然后读取注册表"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\AdapterName\Connection\"中的Name键值即可。其中,AdapterName是IP_ADAPTER_INFO结构体的成员,每个网卡都有一个IP_ADAPTER_INFO结构体来保存信息,通过调用API函数GetAdaptersInfo可以获得所有网卡的结构体的链表指针。
注册表的键值如下图所示:
在这里插入图片描述

示例代码:

PIP_ADAPTER_INFO NetCardInfo::ShowNetCardInfo(int* count) {
	ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
	PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO*)GlobalAlloc(GPTR, sizeof(IP_ADAPTER_INFO));
	if (pAdapterInfo == NULL)
	{
		printf("ShowNetCardInfo GlobalAlloc error\r\n");
		return FALSE;
	}

	if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
	{
		GlobalFree((char*)pAdapterInfo);
		pAdapterInfo = (IP_ADAPTER_INFO*)GlobalAlloc(GPTR, ulOutBufLen);
		if (pAdapterInfo == NULL)
		{
			printf("ShowNetCardInfo GlobalAlloc error\r\n");
			return FALSE;
		}
	}

	if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == NO_ERROR)
	{
		int number = 0;
		PIP_ADAPTER_INFO pAdapter = 0;
		printf("本机安装的网卡列表如下:\r\n");
		for (pAdapter = pAdapterInfo; pAdapter != NULL; pAdapter = pAdapter->Next)
		{
			number++;

			string aliasname = getAdapterAlias(pAdapter->AdapterName);

			printf("网卡号码:\t%d\r\n网卡名称:\t%s\r\n网卡别名:\t%s\r\n网卡描述:\t%s\r\n网卡类型:\t%d\r\n网卡IP地址:\t%s\r\n网关IP地址:\t%s\r\n\r\n",
				number, pAdapter->AdapterName, aliasname.c_str(), pAdapter->Description, pAdapter->Type, pAdapter->IpAddressList.IpAddress.String,
				pAdapter->GatewayList.IpAddress.String);
		}

		*count = number;
		return pAdapterInfo;
	}
	else
	{
		printf("GetNetCardInfo GetAdaptersInfo error\r\n");
		GlobalFree((char*)pAdapterInfo);
		return FALSE;
	}
}


string NetCardInfo::getAdapterAlias(string adaptername) {
	unsigned char szalias[MAX_PATH] = { 0 };
	//subkey can not be \\SYSTEM\\xxx,why?
	string subkey = "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\" + adaptername + "\\Connection\\";

	int cpubits = Tools::GetCpuBits();
	int ret = Tools::QueryRegistryValue(HKEY_LOCAL_MACHINE, (char*)subkey.c_str(), "Name", szalias, cpubits);
	if (ret)
	{
		return string((char*)szalias);
	}

	return "";
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值