主程序:gethostbyname.c
#include <netdb.h> #include <string.h> #include <stdio.h> int main(int argc, char *argv[]) { if (argc != 2) { printf("Usage:%s domain_name\n", argv[0]); return 1; } struct hostent *ht = NULL; // char host[20] = "www.google.com"; // ht = gethostbyname(host); ht = gethostbyname(argv[1]); if (ht) { int i = 0; printf("Host:%s \n", argv[1]); /* 原始域名 */ printf("Name:%s\n", ht->h_name); /* 名称 */ /*协议族AF_INET为IPv4或者AF_INET6为IPv6 */ printf("Type:%s\n", ht->h_addrtype == AF_INET ? "AF_INET" : "AF_INET6"); /* IP地址的长度 */ printf("Legnth:%d\n", ht->h_length); /* 打印IP地址 */ printf("\n"); printf("IP Address:\n"); for (i = 0;; i++) { if (ht->h_addr_list[i] != NULL) { /* 不是IP地址数组的结尾 */ printf("IP:%s\n", inet_ntoa((unsigned int *)ht->h_addr_list[i])); /*打印IP地址 */ } else { /*达到结尾 */ break; /*退出for循环 */ } } /* 打印域名地址 */ printf("\n"); printf("Domain Name:\n"); for (i = 0;; i++) { /*循环 */ if (ht->h_aliases[i] != NULL) { /* 没有到达域名数组的结尾 */ printf("alias %d:%s\n", i, ht->h_aliases[i]); /* 打印域名 */ } else { /*结尾 */ printf("\n"); break; /*退出循环 */ } } } return 0; }
makefile文件:
CC = gcc all:app app: gethostbyname.o $(CC) gethostbyname.o -o app clean: rm -f app *.o
运行效果:
[root@ShiGuang gethostbyname]# make
gcc -c -o gethostbyname.o gethostbyname.c
gcc gethostbyname.o -o app
[root@ShiGuang gethostbyname]# ls
app gethostbyname.c gethostbyname.o Makefile
[root@ShiGuang gethostbyname]# ./app www.google.com.hk
Host:www.google.com.hk
Name:www-hk.l.google.com
Type:AF_INET
Legnth:4
IP Address:
IP:72.17.67.8
IP:80.17.67.8
IP:88.17.67.8
IP:96.17.67.8
IP:104.17.67.8
IP:112.17.67.8
Domain Name:
alias 0:www.google.com.hk
[root@ShiGuang gethostbyname]#