資源簡(jiǎn)介
大家別介意那點(diǎn)分啊,下載后評(píng)論分就回來(lái)了。(記得要評(píng)星級(jí)才有)
/**************************************
** 實(shí)現(xiàn)簡(jiǎn)單的DNS 學(xué)習(xí)、測(cè)試之用
** VC6.0 winXP 編譯通過(guò)
** 20100406 v 1.0
** from http://blog.csdn.net/jxfgh
************************************/

代碼片段和文件信息
/**************************************
**?實(shí)現(xiàn)簡(jiǎn)單的DNS?學(xué)習(xí)、測(cè)試之用
**?VC6.0?winXP?編譯通過(guò)
**?20100406??v1.0
**?from?http://blog.csdn.net/jxfgh
************************************/
#include????
#include????
#include??????
typedef?struct?_DNSHEAD{???//dns?頭部
USHORT?ID;
USHORT?tag; //?dns?標(biāo)志(參數(shù))
USHORT?numQ; //?問(wèn)題數(shù)
USHORT?numA; //?答案數(shù)
USHORT?numA1; //?權(quán)威答案數(shù)
USHORT?numA2; //?附加答案數(shù)
}DnsHead;
typedef?struct?_DNSQUERY //dns?查詢結(jié)構(gòu)
{
//? ??char???name[64];
//? //查詢的域名這是一個(gè)大小在0到63之間的字符串;
??USHORT?type;
??//查詢類(lèi)型,大約有20個(gè)不同的類(lèi)型
??USHORT?classes;
??//查詢類(lèi)通常是A類(lèi)既查詢IP地址。
}DnsQuery;
#pragma comment(lib“ws2_32.lib“)
//?初始化操作
bool?initWSA();
//顯示錯(cuò)誤
void?displayerrWSA(char?*str);
//創(chuàng)建套接字
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);
//設(shè)置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?服務(wù)器地址
char?*name?=?0;?//要查詢的域名
if?(?!initWSA()?)//初始化
{
displayerrWSA(“initWSA?err!“);
return?1;
}
//創(chuàng)建套接字
SOCKET?sockTo?;
if?(?(sockTo?=?CreateSocket(SOCK_DGRAM))?==?0)
{
displayerrWSA(“CreatSocket?err!“);
return?1;
}
while?(1)
{
if?(arg?2)
{
char?temp[1024]={0};
printf(“\n請(qǐng)輸入要查詢的域名:“);
scanf(“%s“temp);
if?(temp[0]?==?‘q‘?||temp[0]?==?‘Q‘)
{
break;
}
name?=??temp;
}
else
{
arg?=?1;
name?=??are[1];
}
//設(shè)置dns?頭部
SetDNSHead(namebuf);
//發(fā)送出去的請(qǐng)求數(shù)據(jù)長(zhǎng)度
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]);
//? }
//發(fā)送DNS?請(qǐng)求
if?(?(?Result?=MySendto(sockTobuflenaddr53)?)?<=?0)
{
displayerrWSA(“sendto?err!“);
continue;
}
//接收應(yīng)答
if?(?(Result?=MyRecvFrom(sockTobuf1024addr53)?)?<=??0)
{
displayerrWSA(“recvfrom?err!“);
continue;
}
//簡(jiǎn)單的取得返回的?IP?地址(?收到的最后4字節(jié)?)
DnsHead?*DnsH?=?(DnsHead?*)buf;
if?(DnsH->numA?==?0)
{
printf(“無(wú)法解析?%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;
}
//*****
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件???????6935??2010-04-06?21:28??Dns.cpp
?????文件?????176207??2010-04-06?21:28??DNS.exe
-----------?---------??----------?-----??----
???????????????183142????????????????????2
評(píng)論
共有 條評(píng)論