概述
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配置信息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复