首页 > 代码库 > 【learning log】Linux network programming
【learning log】Linux network programming
DNS host entry 包含 DNS database 中有关某一 domin name 或 ip address 的 DNS 信息。
1 struct hostent{2 char *h_name;3 char *h_aliases;4 int h_addrtype;5 int h_length;6 char **h_addr_list;7 };
hostinfo 程序, 用来从 ip 或 domin name 解析 DNS info。
1 /*This program is modified from CSAPP: hostinfo.c 2 */ 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <unistd.h> 6 #include <string.h> 7 #include <ctype.h> 8 #include <setjmp.h> 9 #include <signal.h>10 #include <sys/time.h>11 #include <sys/types.h>12 #include <sys/wait.h>13 #include <sys/stat.h>14 #include <fcntl.h>15 #include <sys/mman.h>16 #include <errno.h>17 #include <math.h>18 #include <pthread.h>19 #include <semaphore.h>20 #include <sys/socket.h>21 #include <netdb.h>22 #include <netinet/in.h>23 #include <arpa/inet.h>24 #include <netinet/in.h>25 #include <netdb.h>26 27 void dns_error(char * msg)28 {29 fprintf(stderr, "%s: DNS error %d\n", msg, h_errno);30 }31 32 struct hostent *Gethostbyaddr(const char * addr, int len, int flag)33 {34 struct hostent *p;35 if ((p = gethostbyaddr(addr, len, flag)) == NULL)36 dns_error("Gethostbyaddr error");37 return p;38 }39 40 struct hostent *Gethostbyname(const char * name)41 {42 struct hostent *p;43 if ((p = gethostbyname(name)) == NULL)44 dns_error("Gethostbyname error");45 return p;46 }47 48 int main(int argc, char ** argv)49 {50 char **pp;51 struct in_addr addr;52 struct hostent *hostp;53 54 if (argc != 2) {55 fprintf(stderr, "usage: %s <domain name or dotted-decimal>\n",56 argv[0]);57 exit(0);58 }59 int af_inet = AF_INET;60 if (inet_aton(argv[1], &addr) != 0)61 hostp = Gethostbyaddr((const char *)&addr, sizeof(addr), AF_INET);62 else63 hostp = Gethostbyname(argv[1]);64 65 if (hostp == NULL)66 exit(0);67 68 printf("official hostname: %s\n", hostp->h_name);69 70 for (pp = hostp->h_aliases;*pp != NULL;pp++)71 printf("alias: %s\n", *pp);72 73 for (pp = hostp->h_addr_list;*pp != NULL; pp++) {74 addr.s_addr = ((struct in_addr *)*pp)->s_addr;75 printf("address: %s\n", inet_ntoa(addr)); 76 }77 exit(0);78 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。