您的位置:首页 > 理论基础 > 计算机网络

Linux网络编程:gethostbyname()的应用

2014-04-25 18:35 453 查看
主程序:gethostbyname.c

[cpp] view
plaincopy

#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文件:

[cpp] view
plaincopy

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]#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: