基于c语言完成动态域名解析系统的设计

基于c语言完成动态域名解析系统的设计

基于c语言完成动态域名解析系统的设计

  • 适用:本科,大专,自考
  • 更新时间2024年
  • 原价: ¥290
  • 活动价: ¥200 (活动截止日期:2024-05-01)
  • (到期后自动恢复原价)
基于c语言完成动态域名解析系统的设计

代做c语言毕业设计)基于c语言完成动态域名解析系统的设计

摘要:域名解析是互联网上建立网站的重要前提之一,通过对互联网域名解析系统原理的研究分析,给出配置域名管理系统的最少条件及应用实例C语言编程由于其性能稳定、源代码开放及价格方面的优势而逐渐被广大用户接受。而Internet的旺盛需求也加大了C语言编程的发展潜力。本论文就C语言编程在网络上的应用,对C语言编程中的动态域名解析的配置进行详细的操作说明。本论文通过对动态域名解析配置前的准备、动态域名解析的具体配置、动态域名解析配置后的测试等一一进行描述,加深对动态域名解析配置方法的理解。本论文同时力求体现清楚明了的特点,结构合理、内容新颖,既注重基础理论又突出实用性。为了让论文更具形象,论文中特加入了截图,图文并茂,减少枯燥难懂的理论,重点对动态域名解析的配置进行全面细致的描述。
关键词:动态域名解析;配置;域名;查询;解析
 
 
 
Abstract: the domain name is one of the important prerequisite for the establishment of the website on the Internet, through the research on the principle of Internet domain names system analysis, given the configuration of the domain name system management minimum condition and application example of the C programming language because of its stable performance, open source code and the price advantage is gradually accepted by the majority of users. The exuberant demand for Internet has also increased the potential for the development of C programming. In this paper, the application of C language programming on the network is described in detail in the configuration of dynamic domain name resolution in the programming of C language. This paper describes the preparation of dynamic DNS, the specific configuration of DDD, and the testing of dynamic DNS after configuration, so as to deepen the understanding of DDD configuration method. At the same time, the paper strives to embody clear and clear features, reasonable structure and novel content, which pays attention to both basic theory and practicality. In order to make the paper more vivid, the paper has added screenshots, graphics and articles to reduce boring and difficult theories. The focus is to give a comprehensive and detailed description of the configuration of DDNS.
Key words: dynamic domain name resolution; configuration; domain name; query; parsing
 
 
 
 
目录
1.论文概述 1
1.1 C语言编程的简介 1
1.1.1 C语言编程 系统的历史 1
1.1.2 C语言编程系统的发展 1
1.1.3 C语言编程系统的未来 1
1.2 动态域名解析的相关知识 2
1.2.1 什么是动态域名解析 2
1.2.2 动态域名解析的类型 2
1.2.3 动态域名解析的查询模式 2
1.2.4 动态域名解析 域名解释过程 4
2.动态域名解析服务器的配置 5
2.1 动态域名解析服务的安装 5
2.2 动态域名解析的具体配置 7
2.2.1 配置文件简介 7
2.2.2 配置主域名服务器 7
2.3 动态域名解析测试 15
3.配置辅助动态域名解析和惟高速缓存动态域名解析 17
3.1 辅助动态域名解析的配置 17
3.2配置唯缓存动态域名解析 18
3.3 动态域名解析配置中的常见错误 19
4.结论 20
致谢 21
参考文献 22
附录 23
 
绪论
随着个人和企业的网站的兴起,越来越多的企业加入到了Internet服务供应商的行列,而服务器的应用逐渐成为研究的热点。在不同的需求和环境中有不同的应用形式,其中,基于动态域名解析以其简单可行的优点,被广泛应用于大型网站。不过,目前基于很多人对动态域名解析的不了解,动态域名解析的发展也受到一定的影响,同时在资源利用率、可靠性、可扩展性方面存在许多问题,这些问题影响了网站的服务质量。因此,改进动态域名解析配置的方法,使人更容易了解,提高应用服务器的服务效率就是一个值得研究的课题。当前,在经济全球化和全球信息化大潮中,人们不仅重视信息及其集成的作用,而且更加重视信息使用者对信息集成的反应和运用。互联网上的域名已为越来越多的人们所关注,因此,了解域名及其对应的IP地址的关系,正确地配置域名服务器,就成为设立网站、使自己在Internet上注册的域名得到体现的关键。
本文的主要工作是基于动态域名解析的基本结构和工作原理,在C语言编程操作系统的基础上配置简单可用的动态域名解析。引导实用者清楚明了地对动态域名解析进行配置,加大C语言编程下的动态域名解析的推广。
C语言代码如下
 
#include   <stdio.h>   
#include   <Winsock2.h>   
#include   <windows.h>      
 
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 * buf,int len,char *addr,USHORT port);   
 
//TCP 连接   
bool MyConnect(SOCKET s, char *addr,USHORT );   
 
// UDP recvfrom   
int MyRecvFrom(SOCKET s, char FAR * buf,int len,char *addr,USHORT port);   
 
//设置DNS 头部   
bool SetDNSHead(char *name,char *buf);   
 
 
 
 
 
 
 
 
int main(int arg,char *are[])    
{   
int Result=0;   
char buf[1024]={0};   
char addr[16] = "202.96.134.133";// 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(name,buf);   
 
//发送出去的请求数据长度   
int len = sizeof(DnsHead)+sizeof(DnsQuery)+strlen(name)+2;   
 
//      for (int  i =0;i<50;i+=2)   
//      {   
//          printf("x",(UCHAR)buf[i]);   
//          printf("x ",(UCHAR)buf[i+1]);   
//      }   
//发送DNS 请求   
if ( ( Result =MySendto(sockTo,buf,len,addr,53) ) <= 0)   
{   
displayErrWSA("sendto err!");   
continue;   
}   
 
//接收应答   
if ( (Result =MyRecvFrom(sockTo,buf,1024,addr,53) ) <=  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;   
}   
 
SOCKET CreateSocket(int type)   
{   
SOCKET  sock=socket(AF_INET,type,0);   
if (sock == INVALID_SOCKET )   
{   
return 0;   
}   
return sock;   
}   
 
 
 
int MySendto(SOCKET sockTo, const char FAR * buf,int len,char *addr,USHORT port)   
{   
//设置发送数据到的 套接字及地址结构   
SOCKADDR_IN   addrTo;    
addrTo.sin_addr.S_un.S_addr=inet_addr(addr);   
addrTo.sin_family=AF_INET;    
addrTo.sin_port=htons(port);   
 
return sendto(  sockTo, buf, len, 0,   
(sockaddr*)&addrTo, sizeof(sockaddr)  );   
 
}   
 
 
bool MyConnect(SOCKET sockTo, char *addr,USHORT port)   
{   
 
int   Result;   
 
//设置连接到的 套接字及地址结构   
SOCKADDR_IN   addrTo;    
addrTo.sin_addr.S_un.S_addr=(inet_addr(addr));   
addrTo.sin_family=AF_INET;    
addrTo.sin_port=htons(port);   
 
//连接   
Result = connect(sockTo,(sockaddr *)&addrTo,sizeof(SOCKADDR_IN));    
if(SOCKET_ERROR == Result)   
{   
return false;   
}   
return true;   
}   
 
 
int MyRecvFrom(SOCKET s, char FAR * buf,int len,char *addr,USHORT port)   
{   
 
//设置发送数据到的 套接字及地址结构   
SOCKADDR_IN   addrFrom;    
addrFrom.sin_addr.S_un.S_addr=inet_addr(addr);   
addrFrom.sin_family=AF_INET;    
addrFrom.sin_port=htons(port);   
int addrlen = sizeof(SOCKADDR_IN);   
return recvfrom( s, buf, len, 0, (SOCKADDR *)&addrFrom, &addrlen);   
}   
 
 
int  ChName(char *fname,char *tname);//域名转化   
bool SetDNSHead(char *name,char *buf)   
{   
 
memset(buf,0,sizeof(DnsHead));   
 
//设置头部   
DnsHead *DnsH = (DnsHead *)buf;   
DnsH->ID = (USHORT)1;   
DnsH->tag = htons(0x0100);   
DnsH->numQ = htons(1);   
DnsH->numA = 0;   
 
DnsQuery *DnsQ =(DnsQuery *) ( buf+ sizeof(DnsHead) );   
int NameLen = ChName(name,(char *)DnsQ);   
 
//设置查询信息   
DnsQ = (DnsQuery *)( (char *)DnsQ + NameLen );   
DnsQ->classes = htons(1);   
DnsQ->type = htons(1);   
return true;   
}   
 
 
 
//显示错误信息   
void displayErrWSA(char *str)   
{   
printf("\n%s,err = %d\n",str,WSAGetLastError());   
getchar();   
}   
 
 
//域名转化   
int  ChName(char *fname,char *tname)   
{   
 
int j =0;   
int i =strlen(fname)-1;   
tname[i+2] = 0;   
int k = i+1;   
for (; i>=0;i--,k--)   
{   
if (fname[i] == '.')   
{   
tname[k] = j;   
j=0;   
}   
else  
{   
tname[k] = fname[i];   
j++;   
}   
}   
tname[k] = j;   
return strlen(tname)+1;   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
参考文献
[1] 鸟哥•许伟,林彩娥•鸟哥的C语言编程私房菜 基础学习篇•第二版•人民邮电出版社•2007
[2] 鸟哥•张楠•鸟哥的C语言编程私房菜 服务器架设篇•第二版•机械工业版社•2008
[3] 杨云,等•C语言编程网络操作系统与实训•第一版•中国铁道出版社•2008
 
 
 
 
 
 
 
 
 
 
 
 
 
  • 关键词 c 语言 完成 动态 域名 解析
  • 上一篇:基于Asp.net航空公司管理信息系统的设计
  • 下一篇:基于HTML5的博看文思博看文思网站开发
  • 暂无购买记录

    暂时没有评论

    真实

    多重认证,精挑细选的优质资源 优质老师。

    安全

    诚实交易,诚信为本。

    保密

    所有交易信息,都为您保密。

    专业

    10年专业经验,10年来帮助无数学子。