资源简介
大家别介意那点分啊,下载后评论分就回来了。(记得要评星级才有)
/**************************************
** 实现简单的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++的二叉搜索树实现学生成绩管理系统
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论