资源简介

大家别介意那点分啊,下载后评论分就回来了。(记得要评星级才有) /************************************** ** 实现简单的DNS 学习、测试之用 ** VC6.0 winXP 编译通过 ** 20100406 v 1.0 ** from http://blog.csdn.net/jxfgh ************************************/

资源截图

代码片段和文件信息

/**************************************
** 实现简单的DNS 学习、测试之用
** VC6.0 winXP 编译通过
** 20100406  v1.0
** from http://blog.csdn.net/jxfgh
************************************/

#include    
#include    
#include      

typedef struct _DNSHEAD{   //dns 头部
USHORT ID;
USHORT tag; // dns 标志(参数)
USHORT numQ; // 问题数
USHORT numA; // 答案数
USHORT numA1; // 权威答案数
USHORT numA2; // 附加答案数
}DnsHead;
typedef struct _DNSQUERY //dns 查询结构
{
//    char   name[64];
//  //查询的域名这是一个大小在0到63之间的字符串;
  USHORT type;
  //查询类型,大约有20个不同的类型
  USHORT classes;
  //查询类通常是A类既查询IP地址。

}DnsQuery;

#pragma comment(lib“ws2_32.lib“)

// 初始化操作
bool initWSA();

//显示错误
void displayerrWSA(char *str);

//创建套接字
SOCKET CreateSocket(int type);

//UDP sendto
int MySendto(SOCKET sockTo const char FAR * bufint lenchar *addrUSHORT port);

//TCP 连接
bool MyConnect(SOCKET s char *addrUSHORT );

// UDP recvfrom
int MyRecvFrom(SOCKET s char FAR * bufint lenchar *addrUSHORT port);

//设置DNS 头部
bool SetDNSHead(char *namechar *buf);

int main(int argchar *are[]) 
{
int Result=0;
char buf[1024]={0};
char addr[16] = “61.187.72.8“;// dns 服务器地址
char *name = 0; //要查询的域名

if ( !initWSA() )//初始化
{
displayerrWSA(“initWSA err!“);
return 1;
}

//创建套接字
SOCKET sockTo ;
if ( (sockTo = CreateSocket(SOCK_DGRAM)) == 0)
{
displayerrWSA(“CreatSocket err!“);
return 1;
}
while (1)
{
if (arg < 2)
{
char temp[1024]={0};
printf(“\n请输入要查询的域名:“);
scanf(“%s“temp);
if (temp[0] == ‘q‘ ||temp[0] == ‘Q‘)
{
break;
}
name =  temp;
}
else
{
arg = 1;
name =  are[1];
}

//设置dns 头部
SetDNSHead(namebuf);

//发送出去的请求数据长度
int len = sizeof(DnsHead)+sizeof(DnsQuery)+strlen(name)+2;

//  for (int  i =0;i<50;i+=2)
//  {
//  printf(“%02x“(UCHAR)buf[i]);
//  printf(“%02x “(UCHAR)buf[i+1]);
//  }
//发送DNS 请求
if ( ( Result =MySendto(sockTobuflenaddr53) ) <= 0)
{
displayerrWSA(“sendto err!“);
continue;
}

//接收应答
if ( (Result =MyRecvFrom(sockTobuf1024addr53) ) <=  0)
{
displayerrWSA(“recvfrom err!“);
continue;
}

//简单的取得返回的 IP 地址( 收到的最后4字节 )
DnsHead *DnsH = (DnsHead *)buf;
if (DnsH->numA == 0)
{
printf(“无法解析 %s 的IP 地址。\n“name);
continue;
}
char *getIP =(char *)buf +Result - 4;
printf(“%s 的IP地址为: “name);
for (int Result= 0 ;Result<4 ;Result++)
{
printf(“%u.“(UCHAR )getIP[Result]);
}
printf(“\n“);
}
return 0;
}

// 初始化操作
bool initWSA()
{
WORD   wVersionRequested; 
WSADATA   wsaData; 
int Result;
wVersionRequested = MAKEWORD( 2 2 ); 
Result = WSAStartup( wVersionRequested &wsaData ); 
if(Result   !=   0 )  
{
return false; 


if( LOBYTE( wsaData.wVersion) != 2 || 
HIBYTE(wsaData.wVersion)!= 2 )

WSACleanup();
return false;   

return true;
}

//*****

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6935  2010-04-06 21:28  Dns.cpp

     文件     176207  2010-04-06 21:28  DNS.exe

----------- ---------  ---------- -----  ----

               183142                    2


评论

共有 条评论