【Window】获取电脑连接的网络信息

1. 连接的Wifi信息


	WSAData data;
	if (WSAStartup(MAKEWORD(1, 1), &data) != 0)
	{
		return;
	}

	DWORD dwError = ERROR_SUCCESS;
	DWORD dwActualVresion;
	HANDLE wlanHandle;

	dwError = WlanOpenHandle(1, NULL, &dwActualVresion, &wlanHandle);
	if (dwError != ERROR_SUCCESS)
	{
		return;
	}

	PWLAN_INTERFACE_INFO_LIST pInterfaceList = NULL;
	dwError = WlanEnumInterfaces(wlanHandle, NULL, &pInterfaceList);
	if (dwError != ERROR_SUCCESS)
	{
		return;
	}

	if (pInterfaceList->dwNumberOfItems == 0)
	{
		return;
	}

	bool findConnectedSsid = false;
	PWLAN_AVAILABLE_NETWORK_LIST pAvailableNetworkList = NULL;

	while (m_WorkingSwitch)
	{
		for (DWORD cur = 0; cur < pInterfaceList->dwNumberOfItems; ++cur)
		{
			GUID &guid = pInterfaceList->InterfaceInfo[cur].InterfaceGuid;

			dwError = WlanGetAvailableNetworkList(wlanHandle, &guid, 2, NULL, &pAvailableNetworkList);

			for (DWORD idx = 0; idx < pAvailableNetworkList->dwNumberOfItems; ++idx)
			{
				if (pAvailableNetworkList->Network[idx].dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
				{
					std::string ssid((char *)(pAvailableNetworkList->Network[idx].dot11Ssid.ucSSID));
					double quality = 1.0 * pAvailableNetworkList->Network[idx].wlanSignalQuality / 100;
					
					//m_pMonitor->signal_SetNetworkInfo(ssid, quality);

					findConnectedSsid = true;
					break;
				}
			}
			if (findConnectedSsid)
			{
				break;
			}
		}
}


network结构体详细信息见msdn


2. 连接本地网络

获取网络dns后缀

			FIXED_INFO fi;
			ULONG ulOutBufLen = sizeof(fi);
			std::string ips;
			// 获取本地电脑的网络参数 
			if (::GetNetworkParams(&fi, &ulOutBufLen) != ERROR_SUCCESS)
			{
				return ;
			}
			bool findConneted = false;
			IP_ADDR_STRING *pDns = &(fi.DnsServerList);
			struct hostent *pHost = NULL;
			struct in_addr s;
			while (pDns)
			{
				inet_pton(AF_INET, pDns->IpAddress.String, (void *)&s);

				pHost = (struct hostent *)gethostbyaddr((char *)&s, 16, AF_INET);

				for (int i = 0; pHost != NULL && pHost->h_addr_list[i]; ++i)
				{
					char* psz = inet_ntoa(*(struct in_addr *)pHost->h_addr_list[i]);
					ips.clear();
					ips.append(pHost->h_name);
					size_t idx = ips.find_first_of('.', 0);
					ips.erase(0, idx + 1);
				}
				pDns = pDns->Next;
			}

			//m_pMonitor->signal_SetNetworkInfo(ips, -1);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值