DnsApi简单探索(6) DnsQuery Demo

Demo程序下载: http://download.csdn.net/detail/ren0065/8320877

主要功能函数实现如下:

void CDnsQueryTestDlg::OnDnsQuery(__in WORD num_dns_type, __in DWORD num_dns_options, __in const PIP4_ARRAY p_ip4_array)
{

	PDNS_RECORD p_dns_record;
	DNS_FREE_TYPE dns_free_type = DnsFreeRecordList;
	in_addr inaddr;
	char c_str_digit[10];

	CString cs_message;
	CString cs_temp;

	int num_res = 0;
	
	if (num_res = DnsQuery(cs_dns_name_, num_dns_type, num_dns_options, p_ip4_array, &p_dns_record, 0))
	{
		LPVOID lpMsgBuf;
		if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
			0, num_res, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, 0))
		{
			cs_message.Format("-ERR: %s \r\n", (LPCTSTR)lpMsgBuf);
			ct_output_.SetSel(ct_output_.GetWindowTextLength(), ct_output_.GetWindowTextLength());
			ct_output_.ReplaceSel(cs_message);
			LocalFree(lpMsgBuf);
		}
		else
		{
			ct_output_.SetSel(ct_output_.GetWindowTextLength(), ct_output_.GetWindowTextLength());
			ct_output_.ReplaceSel("-ERR FormatMessage failed.?\r\n");
		}
		return;
	}


	do
	{
		switch (p_dns_record->wType)
		{
		case DNS_TYPE_A:
			inaddr.S_un.S_addr = p_dns_record->Data.A.IpAddress;
			cs_message.Format("   A %s [%s]", p_dns_record->pName, inet_ntoa(inaddr));
			break;

		case DNS_TYPE_NS:
			cs_message.Format("   NS %s %s", p_dns_record->pName, p_dns_record->Data.NS.pNameHost);
			break;

		case DNS_TYPE_MD:
			cs_message.Format("   MD %s %s", p_dns_record->pName, p_dns_record->Data.MD.pNameHost);
			break;

		case DNS_TYPE_MF:
			cs_message.Format("   MF %s %s", p_dns_record->pName, p_dns_record->Data.MF.pNameHost);
			break;

		case DNS_TYPE_CNAME:
			cs_message.Format("   CNAME %s %s", p_dns_record->pName, p_dns_record->Data.CNAME.pNameHost);
			break;

		case DNS_TYPE_SOA:
			cs_message.Format("   SOA %s  nameserv: %s\r\n", p_dns_record->pName, p_dns_record->Data.SOA.pNamePrimaryServer);

			cs_temp.Format("              admin: %s\r\n", p_dns_record->Data.SOA.pNameAdministrator);
			cs_message += cs_temp;
			cs_temp.Format("             serial: %u\r\n", p_dns_record->Data.SOA.dwSerialNo);
			cs_message += cs_temp;
			cs_temp.Format("            refresh: %u\r\n", p_dns_record->Data.SOA.dwRefresh);
			cs_message += cs_temp;
			cs_temp.Format("                ttl: %u\r\n", p_dns_record->Data.SOA.dwDefaultTtl);
			cs_message += cs_temp;
			cs_temp.Format("             expire: %u\r\n", p_dns_record->Data.SOA.dwExpire);
			cs_message += cs_temp;
			cs_temp.Format("              retry: %u", p_dns_record->Data.SOA.dwRetry);
			cs_message += cs_temp;
			break;

		case DNS_TYPE_MB:
			cs_message.Format("   MB %s %s", p_dns_record->pName, p_dns_record->Data.MB.pNameHost);
			break;

		case DNS_TYPE_MG:
			cs_message.Format("   MG %s %s", p_dns_record->pName, p_dns_record->Data.MG.pNameHost);
			break;

		case DNS_TYPE_MR:
			cs_message.Format("   MR %s %s", p_dns_record->pName, p_dns_record->Data.MR.pNameHost);
			break;

			//case DNS_TYPE_NULL:
			//  message.Format("   MB %s %s",pdns->pName,pdns->Data.Null.MR.pNameHost);
			//break;

		case DNS_TYPE_WKS:
			inaddr.S_un.S_addr = p_dns_record->Data.WKS.IpAddress;
			cs_message.Format("   WKS %s [%s] proto: %d mask: %d", p_dns_record->pName, inet_ntoa(inaddr), p_dns_record->Data.WKS.chProtocol, p_dns_record->Data.WKS.BitMask);
			break;

		case DNS_TYPE_PTR:
			cs_message.Format("   PTR %s %s", p_dns_record->pName, p_dns_record->Data.PTR.pNameHost);
			break;

		case DNS_TYPE_HINFO:
			cs_message.Format("   HINFO %s", p_dns_record->pName);
			for (u_int i = 0; i < p_dns_record->Data.HINFO.dwStringCount; i++)
			{
				cs_message += "\r\n            ";
				cs_message += p_dns_record->Data.HINFO.pStringArray[i];
			}
			break;

		case DNS_TYPE_MINFO:
			cs_message.Format("   MINFO %s err: %s name: %s", p_dns_record->pName, p_dns_record->Data.MINFO.pNameErrorsMailbox, p_dns_record->Data.MINFO.pNameMailbox);
			break;

		case DNS_TYPE_MX:
			cs_message.Format("   MX %s %s pref: %d", p_dns_record->pName, p_dns_record->Data.MX.pNameExchange, p_dns_record->Data.MX.wPreference);
			break;

		case DNS_TYPE_TEXT:
			cs_message.Format("   TEXT %s", p_dns_record->pName);
			for (u_int i = 0; i < p_dns_record->Data.TXT.dwStringCount; i++)
			{
				cs_message += "\r\n            ";
				cs_message += p_dns_record->Data.TXT.pStringArray[i];
			}
			break;

		case DNS_TYPE_RP:
			cs_message.Format("   RP %s err: %s name: %s", p_dns_record->pName, p_dns_record->Data.RP.pNameErrorsMailbox, p_dns_record->Data.RP.pNameMailbox);
			break;

		case DNS_TYPE_AFSDB:
			cs_message.Format("   AFSDB %s %s pref: %d", p_dns_record->pName, p_dns_record->Data.AFSDB.pNameExchange, p_dns_record->Data.AFSDB.wPreference);
			break;

		case DNS_TYPE_X25:
			cs_message.Format("   X25 %s", p_dns_record->pName);
			for (u_int i = 0; i < p_dns_record->Data.X25.dwStringCount; i++)
			{
				cs_message += "\r\n            ";
				cs_message += p_dns_record->Data.X25.pStringArray[i];
			}
			break;

		case DNS_TYPE_ISDN:
			cs_message.Format("   ISDN %s", p_dns_record->pName);
			for (u_int i = 0; i < p_dns_record->Data.ISDN.dwStringCount; i++)
			{
				cs_message += "\r\n            ";
				cs_message += p_dns_record->Data.ISDN.pStringArray[i];
			}
			break;

		case DNS_TYPE_RT:
			cs_message.Format("   RT %s %s pref: %d", p_dns_record->pName, p_dns_record->Data.RT.pNameExchange, p_dns_record->Data.RT.wPreference);
			break;


			//case DNS_TYPE_SIG:
			//break;
			//case DNS_TYPE_KEY:
			//break;


		case DNS_TYPE_AAAA:
			cs_message.Format("   AAAA %s %s pref: %d [", p_dns_record->pName);
			for (int i = 0; i < 16; i++)
			{
				sprintf_s(c_str_digit, 10, "%d", p_dns_record->Data.AAAA.Ip6Address.IP6Byte[i]);
				cs_message += c_str_digit;
				if (i != 15)
					cs_message += ".";
			}
			cs_message += "]";
			break;

		case DNS_TYPE_SRV:
			cs_message.Format("   SRV %s %s port:%d prior:%d weight:%d", p_dns_record->pName, p_dns_record->Data.SRV.pNameTarget, p_dns_record->Data.SRV.wPort, p_dns_record->Data.SRV.wPriority, p_dns_record->Data.SRV.wWeight);
			break;

			//case DNS_TYPE_WINS:
			//break;

		case DNS_TYPE_WINSR:
			cs_message.Format("   NBSTAT %s %s", p_dns_record->pName, p_dns_record->Data.WINSR.pNameResultDomain);
			break;




		default:
			cs_message.Format(" unknown: %s type %d", p_dns_record->pName, p_dns_record->wType);
			break;
		}

		if (p_dns_record->Flags.S.Section == DNSREC_AUTHORITY)
			cs_message += "   (authority)";
		if (p_dns_record->Flags.S.Section == DNSREC_ADDITIONAL)
			cs_message += "   (additional)";

		ct_output_.SetSel(ct_output_.GetWindowTextLength(), ct_output_.GetWindowTextLength());
		ct_output_.ReplaceSel(cs_message + "\r\n");

		p_dns_record = p_dns_record->pNext;
	} while (p_dns_record);


	ct_output_.SetSel(ct_output_.GetWindowTextLength(), ct_output_.GetWindowTextLength());
	ct_output_.ReplaceSel("\r\n");


	DnsRecordListFree(p_dns_record, dns_free_type);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值