资源简介
大家别介意那点分啊,下载后评论分就回来了。(记得要评星级才有)
/**************************************
** 实现简单的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语言项目五子棋对战局域网.rar
- C语言大作业西北工业大学
- C语言航空客运订票系统
- c语言实现远程控制鼠标
- linux下C语言编写的学生信息管理系统
- 300个C语言程序范例
- C语言、Python实现TF-IDF算法
- c语言 程序填空题题库
- MySQL——长途汽车管理系统c语言版,
- 基于ZigBee技术的智能灌溉系统研究与
- c语言课程设计图书信息管理系统
- 电话费查询系统(C语言文字)
- 操作系统 内存分配与回收 C语言模拟
- 使用c语言写的卷积运算程序
- ACM HDU 2000->2099 解题报告
- 学生学籍管理系统c语言实现
- 用c语言编写的一个中国象棋
- 分支定界算法C语言实现源程序
- C语言 聊天室
- STM32 LCD12864并口驱动实验 完整C语言代
- MSP430单片机秒表程序完整 完整C语言代
- 费诺编码的C语言实现
- c语言求硬币找零钱问题
- C语言图书管理课设报告
- Verilog C语言 实现CRC16校验 高低字节分
- c语言学习例题.docx
- openssl加解密C语言代码
- 大一C语言基础学习练习例题大部分考
- 酒店管理系统c语言数组
- 大学C语言考试题库(含答案).docx
评论
共有 条评论