資源簡介
大家別介意那點分啊,下載后評論分就回來了。(記得要評星級才有)
/**************************************
** 實現簡單的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
- 上一篇:51單片機Modbus協議
- 下一篇:使用C++的二叉搜索樹實現學生成績管理系統
評論
共有 條評論