注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

BCB-DG's Blog

...

 
 
 

日志

 
 

DnsQuery  

2013-06-01 15:23:59|  分类: Socket |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
#include <winsock2.h>  //winsock
#include <windns.h>   //DNS api's
#include <stdio.h>    //standard i/o


void Usage(char *progname)
{
    fprintf(stderr,"Usage\n%s -n [HostName|IP Address] -t [Type]  -s [DnsServerIp]\n",progname);
    fprintf(stderr,"Where:\n\t\"HostName|IP Address\" is the name or IP address of the computer ");
    fprintf(stderr,"of the record set being queried\n");
    fprintf(stderr,"\t\"Type\" is the type of record set to be queried A or PTR\n");
    fprintf(stderr,"\t\"DnsServerIp\"is the IP address of DNS server (in dotted decimal notation) ");
    fprintf(stderr,"to which the query should be sent\n");
    exit(1);
}

void ReverseIP(char* pIP)
{
    char seps[] = ".";
    char pIPSec[4][4];
    int i=0;
    char *token = strtok( pIP, seps);
    while( token != NULL )
    {
        //While there are "." characters in "string"
        sprintf(pIPSec[i],"%s", token);
        //Get next "." character:
        token = strtok( NULL, seps );
        i++;
    }
    sprintf(pIP,"%s.%s.%s.%s.%s", pIPSec[3],pIPSec[2],pIPSec[1],pIPSec[0],"IN-ADDR.ARPA");
}

void __cdecl main(int argc, char *argv[])
{
    DNS_STATUS status;               //Return value of  DnsQuery_A() function.
    PDNS_RECORD pDnsRecord;          //Pointer to DNS_RECORD structure.
    PIP4_ARRAY pSrvList = NULL;      //Pointer to IP4_ARRAY structure.
    WORD wType;                      //Type of the record to be queried.
    char* pOwnerName;                //Owner name to be queried.
    char pReversedIP[255];             //Reversed IP address.
    char DnsServIp[255];             //DNS server ip address.
    DNS_FREE_TYPE freetype = DnsFreeRecordListDeep;
    IN_ADDR ipaddr;

    if(argc > 4)
    {
        for(int i = 1; i < argc ; i++)
        {
            if ( (argv[i][0] == '-') || (argv[i][0] == '/') )
            {
                switch(tolower(argv[i][1]))
                {
                    case 'n':
                        pOwnerName=argv[++i];
                        break;

                    case 't':
                        if (!stricmp(argv[i+1], "A") )
                            wType = DNS_TYPE_A; //Query host records to resolve a name.
                        else if (!stricmp(argv[i+1], "PTR") )
                        {
                            //pOwnerName should be in "xxx.xxx.xxx.xxx" format
                            if(strlen(pOwnerName)<=15)
                            {
                                //You must reverse the IP address to request a Reverse Lookup of a host name.
                                sprintf(pReversedIP,"%s",pOwnerName);
                                ReverseIP(pReversedIP);
                                pOwnerName=pReversedIP;
                                wType = DNS_TYPE_PTR; //Query PTR records to resolve an IP address
                            }
                            else
                            {
                                Usage(argv[0]);
                            }
                        }
                        else
                            Usage(argv[0]);
                        i++;
                        break;

                    case 's':
                        // Allocate memory for IP4_ARRAY structure.
                        pSrvList = (PIP4_ARRAY) LocalAlloc(LPTR,sizeof(IP4_ARRAY));
                        if(!pSrvList)
                        {
                            printf("Memory allocation failed \n");
                            exit(1);
                        }
                        if(argv[++i])
                        {
                            strcpy(DnsServIp,argv[i]);
                            pSrvList->AddrCount = 1;
                            pSrvList->AddrArray[0] = inet_addr(DnsServIp); //DNS server IP address
                            break;
                        }

                    default:
                        Usage(argv[0]);
                        break;
                }
            }
            else
                Usage(argv[0]);     
        }   
    }
    else
        Usage(argv[0]);
    
      // Calling function DnsQuery to query Host or PTR records   
    status = DnsQuery_A(pOwnerName,                 //Pointer to OwnerName.
                        wType,                      //Type of the record to be queried.
                        DNS_QUERY_BYPASS_CACHE,     // Bypasses the resolver cache on the lookup.
                        pSrvList,                   //Contains DNS server IP address.
                        &pDnsRecord,                //Resource record that contains the response.
                        NULL);                     //Reserved for future use.

    if (status)
    {
        if(wType == DNS_TYPE_A)
            printf("Failed to query the host record for %s and the error is %d \n", pOwnerName, status);
        else
            printf("Failed to query the PTR record and the error is %d \n", status);
    }
    else
    {
        if(wType == DNS_TYPE_A)
        {
            //convert the Internet network address into a string
            //in Internet standard dotted format.
            ipaddr.S_un.S_addr = (pDnsRecord->Data.A.IpAddress);
            printf("The IP address of the host %s is %s \n", pOwnerName,inet_ntoa(ipaddr));

            // Free memory allocated for DNS records.
            DnsRecordListFree(pDnsRecord, freetype);
        }
        else
        {
            printf("The host name is %s  \n",(pDnsRecord->Data.PTR.pNameHost));
            // Free memory allocated for DNS records.
            DnsRecordListFree(pDnsRecord, freetype);
        }
    }
    LocalFree(pSrvList);
}
  评论这张
 
阅读(824)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017