Linux 服务器和客户端信息获取(完)

这篇博客详细介绍了Linux环境中IP地址与域名之间的转换,包括DNS原理、DNS查询过程,以及gethostbyname()和gethostbyaddr()两个关键函数的使用方法。通过实例展示了如何获取和打印主机信息,帮助读者理解并实现域名到IP地址的转换操作。
摘要由CSDN通过智能技术生成

IP域名转换

一、IP地址与域名之间的相互转换

在实际的使用中,经常有只知道主机的域名而不知道主机名对应的IP 地址的情况,而socket 的API 均为基于IP地址,所以如何进行主机域名和IP 地址之间的转换是十分必要的。
本节对DNS 的原理和相关的域名转换函数进行介绍。

1、DNS原理

DNS用于TCP/IP的网络,用比较形象化的友好命名来代替枯燥的IP地址,方便用户记忆。DNS的功能就是在主机的名称和IP地址之间担任翻译工作。

2、DNS查询过程

一个查询DNS 地址过程的示意图如下图所示。
实际应用中,经常有进行DNS 转换的过程
例如当使用Web 浏览器时, 在地址栏输入域名,浏览器就可以自动打开远程主机上的内容,这里就有DNS 的主机在起作用。本地主机将用户输入的域名通过DNS 主机翻译成对应的IP地址,然后通过IP地址访问目标主机。
由于程序仅能识别IP地址,而IP地址又不容易被记忆,所以为了方便人类记忆而又方便程序访问,出现了DNS 系统。
在这里插入图片描述

二、获取主机信息的函数

gethostbyname()函数和gethostbyaddr()函数都可以获得主机的信息。gethostbyname()函数通过主机的名称获得主机的信息,gethostbyaddr()函数通过IP地址获得主机的信息。

1、gethostbyname()函数

gethostbyname()函数的原型如下,它根据主机名获取主机的信息,例如www.sina.com.cn,使用gethostbyname(“www.sina.com.cn”)可以获得主机的信息。这个函数的参数name是要查询的主机名,通常是DNS的域名。

#include <netdb.h>
extern int h_errno;
struct hostent *gethostbyname(const char *name);

hostent 原型:

2、gethostbyaddr()函数

gethostbyaddr()函数通过查询IP地址来获得主机的信息。

#include<netdb.h>
#include<sys/socket.h>
struct hostent *
    gethostbyaddr(const void *addr,int len,int type);

gethostbyaddr()函数的第1个参数addr 在lPv4 的情况下指向一个struct in addr 的地址结构,用户需要查询主机的IP地址填入到这个参数中
第2 个参数len 表示第一个参数所指区域的大小,在IPv4 情况下为sizeof(struct in_addr),即32 位
第3 个参数type 指定需要查询主机IP地址的类型,在lPv4的情况下为AF_INET。
返回值和错误代码含义与函数gethostbyname()相同。

三、转换实例

1、获得主机名

字符类型数组指针host 的内容为www.sina.com.cn,调用gethostbyname()函数在得主机的信息,结果保存在hostent类型的变量ht中。

#include<netdb.h>
#include<string.h><
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值