zoukankan      html  css  js  c++  java
  • 基于visual c++之windows核心编程代码分析(51)基于匿名管道实现远程控制

      我们知道域名是为了方便记忆而专门建立的一套地址转换系统,要访问一台互联网上的服务器,最终还必须通过IP地址来实现,域名解析就是将域名重新转换为IP地址的过程。一个域名对应一个IP地址,一个IP地址可以对应多个域名;所以多个域名可以同时被解析到一个IP地址。域名解析需要由专门的域名解析服务器(DNS)来完成。   解析过程,比如,一个域名为:www.staspcom,是想看到这个现HTTP服务,如果要访问网站,就要进行解析,首先在域名注册商那里通过专门的DNS服务器解析到一个WEB服务器的一个固定IP上:211.214.1.***,然后,通过WEB服务器来接收这个域名,把www.staspcom这个域名映射到这台服务器上。那么,输入www.staspcom这个域名就可以实现访问网站内容了.即实现了域名解析的全过程;   人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。   域名解析协议(DNS)用来把便于人们记忆的主机域名和电子邮件地址映射为计算机易于识别的IP地址。DNS是一种c/s的结构,客户机就是用户用于查找一个名字对应的地址,而服务器通常用于为别人提供查询服务。

    下面我们编程实现域名解析,

    #include "stdafx.h"
    #include "test3.h"
    #include "test3Dlg.h"
    #include "Windns.h"
    #include "Winsock2.h"
    #include "Winerror.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // Ctest3Dlg 对话框
    
    
    
    
    Ctest3Dlg::Ctest3Dlg(CWnd* pParent /*=NULL*/)
    	: CDialog(Ctest3Dlg::IDD, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void Ctest3Dlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_IPADDRESS1, m_addrCtrl1);
    	DDX_Control(pDX, IDC_IPADDRESS2, m_ipaddrCtrl2);
    	DDX_Control(pDX, IDC_LIST1, m_ListBox);
    }
    
    BEGIN_MESSAGE_MAP(Ctest3Dlg, CDialog)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    	ON_BN_CLICKED(IDC_BUTTON1, &Ctest3Dlg::OnBnClickedButton1)
    	ON_NOTIFY(IPN_FIELDCHANGED, IDC_IPADDRESS1, &Ctest3Dlg::OnIpnFieldchangedIpaddress1)
    END_MESSAGE_MAP()
    
    
    // Ctest3Dlg 消息处理程序
    
    BOOL Ctest3Dlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    	//  执行此操作
    	SetIcon(m_hIcon, TRUE);			// 设置大图标
    	SetIcon(m_hIcon, FALSE);		// 设置小图标
    	SetDlgItemText(IDC_E_NAME,"www.baidu.com");
    	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    void Ctest3Dlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	
    	
    		CDialog::OnSysCommand(nID, lParam);
    	
    }
    
    
    void Ctest3Dlg::OnPaint()
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); 
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// 使图标在工作矩形中居中
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// 绘制图标
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialog::OnPaint();
    	}
    }
    
    
    //
    HCURSOR Ctest3Dlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
    
    
    void Ctest3Dlg::OnBnClickedButton1()
    {
    	// TODO: 在此添加控件通知处理程序代码
    	PDNS_RECORD*   pPDNS_Record;  
    	PDNS_RECORD pDNSRecord;
    	DNS_RECORD myDNS_RECORD;
    	DNS_STATUS   DNS_Status;   
    	PVOID*   ppReserve;  
    	CString strName,strServerIP  ;
    	DWORD hostip=0;
    
    	GetDlgItemText(IDC_E_NAME,strName);
    	DWORD dwDNSServIP;
    	m_addrCtrl1.GetAddress(dwDNSServIP);
    	IP4_ARRAY ip4array,tempArray,*pip4array;
    	CString tempStrName;
    	ip4array.AddrCount=1;
    	ip4array.AddrArray[0]=htonl(dwDNSServIP);
    	DWORD dwip=htonl(dwDNSServIP);
    
    	CString str;
    DNS_RECORD* ppQueryResultsSet = NULL;
    	pDNSRecord=&myDNS_RECORD;
    	pPDNS_Record=NULL;// & pDNSRecord;
    	pip4array=&ip4array;
    	if (!dwip)
    		pip4array=NULL;
    
    	DNS_Status   =  DnsQuery(strName,   DNS_TYPE_CNAME,   DNS_QUERY_BYPASS_CACHE,     
    	pip4array,   &ppQueryResultsSet,NULL); //待查询域名的别名CNAME
     	int i=0;
     	while (m_ListBox.GetCount()>0)
     	{
     		m_ListBox.DeleteString(m_ListBox.GetCount()-1);
     	}
    
    	if(DNS_Status != ERROR_SUCCESS)
    	{
    		DNS_Status   =  DnsQuery(strName,DNS_TYPE_A,DNS_QUERY_BYPASS_CACHE,     
    			pip4array,   &ppQueryResultsSet,NULL); //&ip4array
    	}
    	else
    	{
    		while(DNS_Status==ERROR_SUCCESS)
    		{
    
    			tempStrName.Format("DNS:%s", ppQueryResultsSet->Data.CNAME);
    			m_ListBox.InsertString(m_ListBox.GetCount(),tempStrName);
    			strName.Format("%s", ppQueryResultsSet->Data.CNAME);
    			tempArray.AddrCount=1;
    			tempArray.AddrArray[0]=ppQueryResultsSet->Data.A.IpAddress;
    		   DNS_Status   =  DnsQuery(strName,   DNS_TYPE_CNAME,   DNS_QUERY_BYPASS_CACHE,     
    			pip4array,   &ppQueryResultsSet,NULL); //别名
    		}
    		 DNS_Status   =  DnsQuery(strName,   DNS_TYPE_A,   DNS_QUERY_BYPASS_CACHE,     
    			pip4array,   &ppQueryResultsSet,NULL); //&ip4array
    
    
    	}
    
    	m_ListBox.InsertString(m_ListBox.GetCount(),"\nQuery chains:\n");
    	int insertPos=m_ListBox.GetCount();
    	if(DNS_Status == ERROR_SUCCESS)
    	{
    		dwip=ppQueryResultsSet->Data.A.IpAddress;
    		hostip=ntohl(dwip);
    		m_ipaddrCtrl2.SetAddress(hostip);//得到的目标域名IP
    		// Found the Host Name ip:
    		do
    		{
    			dwip=ppQueryResultsSet->Data.A.IpAddress;
    			hostip=ntohl(dwip);
    			//m_ipaddrCtrl2.SetAddress(hostip);
    			str.Format("%s(%d.%d.%d.%d)\n",ppQueryResultsSet->pName,
    				HIBYTE(HIWORD(hostip)),
    				LOBYTE(HIWORD(hostip)),
    				HIBYTE(LOWORD(hostip)),
    				LOBYTE(LOWORD(hostip)));
    
    			m_ListBox.InsertString(insertPos,str);
    			ppQueryResultsSet=ppQueryResultsSet->pNext;
    
    		}while(ppQueryResultsSet);
    		m_ListBox.InsertString(insertPos,"(destination)");
    
    
    	}else
    		AfxMessageBox("Failure!");
    
    }
    
    void Ctest3Dlg::OnIpnFieldchangedIpaddress1(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	LPNMIPADDRESS pIPAddr = reinterpret_cast<LPNMIPADDRESS>(pNMHDR);
    
    	*pResult = 0;
    }
    


     

  • 相关阅读:
    微信扫码签到系统asp源码2.0示例
    asp代码写的,微信会员报名转发分享带上下级和邀约人关系并且能微信支付asp编号的
    asp微信支付代码v4.1无需证书版,带回调入库的asp支付源码
    asp微信支付源码完整版下载,带证书文件post_url.aspx和post_url.aspx.cs源码下载
    asp群发微信公众号模板消息代码
    asp生成带参数的二维码并合成推广海报图片,asp合并合成推广海报图片asp代码
    asp微信公众号支付回调参数入库demo详细示例
    asp实现微信jssdk分享,静态页html实现jssdk微信分享
    asp微信支付企业付款功能代码下载
    asp实现微信客服消息群发,asp代码写的
  • 原文地址:https://www.cnblogs.com/new0801/p/6177774.html
Copyright © 2011-2022 走看看