1. 实验目的
- 掌握域名解析编程技术;
- 掌握有关域名解析函数的使用方法;
2. 实验要求
- 认真阅读和掌握本实验的相关的知识点。
- 上机编写并运行本程序。
- 保存和打印出程序的运行结果,并结合程序进行分析。
3. 实验内容
- 编写域名解析程序;
- 并能根据命令行输入的IP或域名完成解析,并打印出域名解析结果。
4. 实验代码和结果
1. 实验代码
代码:
#include<netdb.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int main(int argc, char *argv[])
{
struct sockaddr_in addr;
struct hostent *he;
char **alias;
if(argc < 2)
{
printf("Usage:%s name | IP", argv[0]);
exit(1);
}
argv++;
for(; *argv != NULL; argv++)
{
if(inet_aton(*argv, &addr.sin_addr) != 0)
{
he = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET);
printf("[>] address information of IP %s:\n", *argv);
}
else
{
he = gethostbyname(*argv);
printf("[>] address information of host %s:\n",*argv);
}
if(he == NULL){
printf("[>] no address information of %s\n",*argv);
continue;
}
printf("[>] Officaial host name:%s\n",he->h_name);
printf("[>] name aliases:");
for(alias=he->h_aliases;*alias!=NULL;alias++)
{
printf("[>] %s\n",*alias);
}
printf("[>] IP addresses:");
for(alias = he->h_addr_list; *alias!=NULL; alias++)
{
printf("[>] %s\n",inet_ntoa(*(struct in_addr *)(*alias)));
}
}
}
2. 实验结果
运行结果:
5. 实验心得
- 通过实验对域名解析,ip地址转换,以及DNS系统有了进一步的了解;
- 名字与地址的转换函数是gethostbyname和gethostbyaddr;
- 提高了自己的网络编程水平,对于地址转换方面的函数和知识更加熟悉。
6. 附件
下面给出客户端和服务端的c文件
链接:https://pan.baidu.com/s/1EUKgVa4kntoDbc0lumh7Wg 密码:7ly0