我是靠谱客的博主 傲娇纸飞机,最近开发中收集的这篇文章主要介绍windows从注册表获取ip配置信息,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

DNS的获取方式有多种:

这里提供一种方式是从注册表获取的:

在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesTcpipParametersAdapters可以获取网卡的SettingID,

//HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesTcpipParametersAdapters
bool GetAdaptersKeyName(std::list<CString> *listAdapters)
{
	OutputDebugStringA("Get network config");
	//获取网卡名称 网卡名称,网卡别名
	string strAdapterName,strAdapterAlias;
	HKEY hKey, hSubKey;
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
		_T("SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Adapters"),
		0,
		KEY_READ,
		&hKey) != ERROR_SUCCESS)
		return FALSE;

	DWORD dwIndex = 0;
	DWORD dwBufSize = 256;
	TCHAR szSubKey[256];
	listAdapters->clear();

	while(RegEnumKeyEx(hKey, dwIndex++, szSubKey, &dwBufSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
	{
		if(RegOpenKeyEx(hKey, szSubKey, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
		{
			listAdapters->push_back(CString(szSubKey));
			RegCloseKey(hSubKey);
		}
		dwBufSize = 256;
	}    /* end of while */

	RegCloseKey(hKey);
	return true;
}

根据SettingID,再逐个查询获取到ip配置包含DNS的信息:

这里要查询 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesTcpipParametersInterfaces的SettingID下的 内容

typedef struct tagNetworkCfg 
{
	TCHAR szIP[18];
	TCHAR szNetmask[18];
	TCHAR szGateway[18];
	TCHAR szDns1[256];
	TCHAR szDns2[18];
}NetworkCfg;


bool GetNetworkCfg(NetworkCfg *cfg, CString strAdapterAlias)
{
	HKEY hKey;
	BYTE lpData[256];
	CString strKeyName = _T("SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\");
	strKeyName += strAdapterAlias;
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
		strKeyName,
		0,
		KEY_READ,
		&hKey) != ERROR_SUCCESS)
		return FALSE;
	DWORD dwBufSize = 256;
	DWORD dwDataType;

	if(RegQueryValueEx(hKey, _T("DhcpIPAddress"), 0,&dwDataType, lpData, &dwBufSize) == ERROR_SUCCESS)
		wcscpy(cfg->szIP,(LPCTSTR)lpData);
	else
	{
		if(RegQueryValueEx(hKey, _T("IPAddress"), 0, &dwDataType, lpData, &dwBufSize) == ERROR_SUCCESS)
			wcscpy(cfg->szIP,(LPCTSTR)lpData);
	}

	dwBufSize = 256;
	if(RegQueryValueEx(hKey, _T("DhcpSubnetMask"), 0, &dwDataType, lpData, &dwBufSize) == ERROR_SUCCESS)
		wcscpy(cfg->szNetmask,(LPCTSTR)lpData);
	else
	{
		if(RegQueryValueEx(hKey, _T("SubnetMask"), 0, &dwDataType, lpData, &dwBufSize) == ERROR_SUCCESS)
			wcscpy(cfg->szNetmask,(LPCTSTR)lpData);
	}

	dwBufSize = 256;
	if(RegQueryValueEx(hKey, _T("DhcpDefaultGateway"), 0, &dwDataType, lpData, &dwBufSize) == ERROR_SUCCESS)
		wcscpy(cfg->szGateway,(LPCTSTR)lpData);
	else
	{
		if(RegQueryValueEx(hKey, _T("DefaultGateway"), 0, &dwDataType, lpData, &dwBufSize) == ERROR_SUCCESS)
			wcscpy(cfg->szGateway,(LPCTSTR)lpData);
	}

	dwBufSize = 256;
	if(RegQueryValueEx(hKey, _T("DhcpNameServer"), 0, &dwDataType, lpData, &dwBufSize) == ERROR_SUCCESS)
		wcscpy(cfg->szDns1,(LPCTSTR)lpData);
	else
	{
		if(RegQueryValueEx(hKey, _T("NameServer"), 0, &dwDataType, lpData, &dwBufSize) == ERROR_SUCCESS)
			wcscpy(cfg->szDns1,(LPCTSTR)lpData);
	}

	RegCloseKey(hKey);
       return true;

}
引用头内容有:
	std::list<CString> listAdapters;
	GetAdaptersKeyName(&listAdapters);

	std::list<NetworkCfg> networkCfgList;
	for (list<CString>::iterator iter = listAdapters.begin(); iter!=listAdapters.end();iter++)
	{
		CString strTemp = *iter;

		NetworkCfg cfg;
		GetNetworkCfg(&cfg, strTemp);
	}

#include <string>
#include <list>

#include <WinSock2.h>
#pragma comment(lib,"Ws2_32.lib")

#include <Iphlpapi.h>
#pragma comment(lib, "Iphlpapi.lib")

using namespace std;


最后

以上就是傲娇纸飞机为你收集整理的windows从注册表获取ip配置信息的全部内容,希望文章能够帮你解决windows从注册表获取ip配置信息所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部