深入理解计算机系统-----HOSTINFO

本文详细介绍了HOSTINFO程序,通过getaddrinfo和getnameinfo函数揭示了域名与其关联IP地址之间的关系,相当于nslookup功能。程序首先设置hints结构以获取所需的IP地址,然后遍历addrinfo结构,利用getnameinfo转换成点分十进制字符串,最后通过freeaddrinfo释放资源。
摘要由CSDN通过智能技术生成

1、程序 

       下图给出一个简单的程序,称为HOSTINFO,使用getaddrinfo和getnameinfo展示出域名到它关联的IP地址之间的映射。相当于nslookup指令。 

#include"csapp.h"
int main(int argc,char **argv)
{
	struct addrinfo *p,*listp,hints;
	char buf[MAXLINE];
	int rc,flags;
	if(argc!=2){
		fprintf(stderr,"usage :%s <domain>\n",argv[0]);
		exit(0);
	}
	memset(&hints,0,sizeof(struct addrinfo));
	hints.ai_family=AF_INET;
	hints.ai_socktype=SOCK_STREAM;
	if((rc=getaddrinfo(argv[1],NULL,&hints,&listp))!=0){
		fprintf(stderr,"getaddrinfo error :%s\n",gai_strerror(rc));
		exit(1);
	}

	flags=NI_NUMERICHOST;
	for(p=listp;p;p=p->ai_next){
		getnameinfo(p->ai_addr,p->ai_addrlen,buf,MAXLINE,NULL,0,flags);
		printf("%s\n",buf);

	}

	freeaddrinfo(listp);
	exit(0);
}

        首先初始化hints结构,使getaddrinfo返回我们想要的地址,这里我们只需要查找32位的IP地址,用作连接的端点。所以service参数用NULL。调用getaddrinfo之后,会遍历addrinfo结构,用getnameinfo将每个套接字地址抓拿混为点分十进制字符串,遍历完列表后,调用freeaddrinfo释放这个列表。

2、头文件内容:

/* $begin csapp.h */
#ifndef __CSAPP_H__
#define __CSAPP_H__

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
#include <setjmp.h>
#include <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值