📄 dns注释.c
字号:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
int main(int argc ,char **argv)
{
struct sockaddr_in addr;
struct hostent *host;
/** hostent类型的结构用于存放主机的信息,其定义如下:
struct hostnet {
char * h_name; //主机的正式名称
char * *h_aliases; //别名列表
int h_addrtype; //主机地址类型:AF_XXX,在TCP/IP中为AF_INET
int h_length; //主机地址长度:4字节(32位)
char * *h_addr_list; //主机地址列表,当类型为AF_INET时为IP地址列表,一台主机可能不止一个IP地址 }
#define h_addr h_addr_list[0] //将地址列表的第一个通过宏定义为结构的一个成员h_addr
*/
char **alias;
if(argc<2)
{
fprintf(stderr,"Usage:%s hostname|ip..\n\a",argv[0]);
exit(1);
}
argv++;
for(;*argv!=NULL;argv++)
{
/* 这里我们假设是IP*/
if(inet_aton(*argv,&addr.sin_addr)!=0)
{
host=gethostbyaddr((char *)&addr.sin_addr,4,AF_INET);
printf("Address information of Ip %s\n",*argv);
}
else
{
/* 域名*/
host=gethostbyname(*argv); printf("Address information of host %s\n",*argv); //
}
if(host==NULL)
{
/* 找不到*/
fprintf(stderr,"No address information of %s\n",*argv);
continue;
}
printf("Official host name %s\n",host->h_name);
printf("Name aliases:");
for(alias=host->h_aliases;*alias!=NULL;alias++)
printf("%s ,",*alias);
printf("\nIp address:\n");
for(alias=host->h_addr_list;*alias!=NULL;alias++)
printf("%s \n ,",inet_ntoa(*(struct in_addr *)(*alias)));
/**函数inet_ntoa()将32位的IP地址转化为十进制点数表示法,关于IP地址的转换主要通过两个函数完成:
#include <arpa/inet.h>
in_addr_t inet_addr(const char *cp);
int inet_aton(const char * cp, struct in_addr *addrp);
char *inet_ntoa(struct in_addr inaddr);
其中a代表ascii码,n代表网络字节顺序。
inet_addr —— 将十进制点数表示法的IP地址字符串转换成32位网络字节顺序的IP地址,如果无效则返回-1。
inet_aton —— 将字符串IP地址转换为32位IP地址,存放在参数addrp中,如果成功则返回1,否则为0。
inet_ntoa —— 将32位IP地址转换为字符串IP地址。
*/
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -