怎样查看默认网关获得网关

C++实现获取IP、子网掩码、网关、DNS等本机网络参数的方法
转载 & & 投稿:shichen2014
这篇文章主要介绍了C++实现获取IP、子网掩码、网关、DNS等本机网络参数的方法,需要的朋友可以参考下
本文以一个完整实例形式介绍了C++实现获取IP、子网掩码、网关、DNS等本机网络参数的方法,供大家参考,具体的完整实例如下:
#pragma comment(lib,"Ws2_32.lib")
#include &Iphlpapi.h&
#pragma comment(lib, "Iphlpapi.lib")
typedef struct tagNetworkCfg
char szIP[18];
char szNetmask[18];
char szGateway[18];
char szDns1[18];
char szDns2[18];
bool GetNetworkCfg(NetworkCfg *cfg)
log_printf("Get network config");
//获取网卡名称 网卡名称,网卡别名
string strAdapterName,strAdapterA
HKEY hKey, hSubKey, hNdiIntK
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"System\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-0}",
&hKey) != ERROR_SUCCESS)
return FALSE;
DWORD dwIndex = 0;
DWORD dwBufSize = 256;
DWORD dwDataT
char szSubKey[256];
unsigned char szData[256];
while(RegEnumKeyEx(hKey, dwIndex++, szSubKey, &dwBufSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
if(RegOpenKeyEx(hKey, szSubKey, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
if(RegOpenKeyEx(hSubKey, "Ndi\\Interfaces", 0, KEY_READ, &hNdiIntKey) == ERROR_SUCCESS)
dwBufSize = 256;
if(RegQueryValueEx(hNdiIntKey, "LowerRange", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
if(strstr((char*)szData, "ethernet") != NULL)//
判断是不是以太网卡
dwBufSize = 256;
if(RegQueryValueEx(hSubKey, "DriverDesc", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
strAdapterName = (LPCTSTR)szD
dwBufSize = 256;
if(RegQueryValueEx(hSubKey, "NetCfgInstanceID", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
strAdapterAlias = (LPCTSTR)szD
RegCloseKey(hNdiIntKey);
RegCloseKey(hSubKey);
dwBufSize = 256;
/* end of while */
RegCloseKey(hKey);
if (strAdapterName.empty() || strAdapterAlias.empty())
log_printf("failed to get network config");
string strKeyName = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
strKeyName += strAdapterA
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
strKeyName.c_str(),
&hKey) != ERROR_SUCCESS)
return FALSE;
dwBufSize = 256;
if(RegQueryValueEx(hKey, "DhcpIPAddress", 0,&dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
strcpy(cfg-&szIP,(LPCTSTR)szData);
if(RegQueryValueEx(hKey, "IPAddress", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
strcpy(cfg-&szIP,(LPCTSTR)szData);
dwBufSize = 256;
if(RegQueryValueEx(hKey, "DhcpSubnetMask", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
strcpy(cfg-&szNetmask,(LPCTSTR)szData);
if(RegQueryValueEx(hKey, "SubnetMask", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
trcpy(cfg-&szNetmask,(LPCTSTR)szData);
dwBufSize = 256;
if(RegQueryValueEx(hKey, "DhcpDefaultGateway", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
strcpy(cfg-&szGateway,(LPCTSTR)szData);
if(RegQueryValueEx(hKey, "DefaultGateway", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
strcpy(cfg-&szGateway,(LPCSTR)szData);
RegCloseKey(hKey);
//获取DNS服务器信息
FIXED_INFO *fi = (FIXED_INFO *)GlobalAlloc(GPTR,sizeof( FIXED_INFO));
ULONG ulOutBufLen = sizeof(FIXED_INFO);
DWORD ret = ::GetNetworkParams(fi, &ulOutBufLen);
if(ret != ERROR_SUCCESS)
GlobalFree(fi);
fi = (FIXED_INFO *) GlobalAlloc( GPTR, ulOutBufLen );
ret = ::GetNetworkParams(fi, &ulOutBufLen);
if(ret != ERROR_SUCCESS)
log_printf("Get Dns server failed");
strcpy(cfg-&szDns1,fi-&DnsServerList.IpAddress.String);
IP_ADDR_STRING *pIPAddr = fi-&DnsServerList.N
if(pIPAddr != NULL)
strcpy(cfg-&szDns2, pIPAddr-&IpAddress.String);
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具网关一直都是正在获取【wifi吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:73,826贴子:
网关一直都是正在获取收藏
这个怎么破啊?求助
wifi信号加强器-[天猫家年华],家装,家具,家居品牌至高满!品牌产品折扣超值!
扪参历井仰胁息,以手抚膺坐长叹。
换一下上网类型
暖,长亭外,古道边,芳草
你家是动态IP上网吗
登录百度帐号温馨提示:糗事百科为大家收集了很多的linuxc语言怎么获取网关地址的糗事,各种关于linuxc语言怎么获取网关地址的爆笑经历,尴尬时刻和开心视频,想持续关注linuxc语言怎么获取网关地址的糗事就收藏本页吧。
扫码下载糗事百科app他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 怎样设置默认网关 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信