【网络编程】获取本机的DNS地址

一、获取本机的DNS地址

DNS(Domain Name System 域名系统)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 DNS使用TCP和UDP端口53。当前,对于每一级的域名长度的限制是63个字符,域名总长度则不能超过253个字符。

DNS是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便地访问互联网,而不用去记住能够被机器直接读取的IP数串。DNS查询过程如下图所示:

在这里插入图片描述


通过函数GetNetworkParams可以获得本机上所有配置好的DNS地址。该函数声明如下:

DWORD GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen);

其中,参数pFixedInfo指向一个缓冲区的指针,该缓冲区包含一个固定的信息结构,该结构接收本地计算机的网络参数(如果函数成功)。调用GetNetWorkParams函数之前,调用方必须分配此缓冲区;pOutBufLen指向一个ULONG变量的指针,该变量指定固定信息结构的大小。如果此大小不足以容纳信息,函数将使用所需大小填充此变量,并且返回错误代码ERROR_BUFFER_OVERFLOW。如果函数成功,返回值为ERROR_SUCCSS。

下面的代码可以获取本机所有的DNS地址:

//获取本机所有DNS地址
void Test5() {
	//获取实际大小
	DWORD nLength = 0;
	if (GetNetworkParams(NULL, &nLength) != ERROR_BUFFER_OVERFLOW) {
		std::cerr << "获取本机DNS地址失败!" << std::endl;
		return;
	}

	//分配空间
	FIXED_INFO* pFixedInfo = (FIXED_INFO*) new BYTE[nLength];

	//获得本地计算机网络参数
	if (GetNetworkParams(pFixedInfo, &nLength) != ERROR_SUCCESS) {
		std::cerr << "获取本机DNS地址失败!" << std::endl;
		delete[]pFixedInfo;
		return;
	}

	//获得本地计算机DNS服务器地址
	IP_ADDR_STRING* pCuurentDnsServer = &pFixedInfo->DnsServerList;
	while (pCuurentDnsServer != NULL) {
		std::cout << "---------------------------------------------" << std::endl;
		std::cout << "IpAddressr:" << pCuurentDnsServer->IpAddress.String << std::endl;
		std::cout << "IpMask:" << pCuurentDnsServer->IpMask.String << std::endl;
		std::cout << "Context:" << pCuurentDnsServer->Context << std::endl;

		pCuurentDnsServer = pCuurentDnsServer->Next;

	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值