TCP/IP网络编程笔记-ch8.域名及网络地址

函数

利用域名获取IP地址

利用gethostbyname可以通过传递字符串格式的域名获取IP地址。

#include<netdb.h>

@param hostname:目的域名
struct hostent * gethostbyname(const char * hostname);
//成功返回hostent结构体地址,失败返回NULL指针

struct hostent
{
    char *h_name;       //official name     官方域名
    char ** h_aliases;  //alias list        包含官方域名在内的对应(同一个IP地址的)同一主页的所有域名
    int h_addrtype;     //host address type IP地址族信息,IPv4则该变量为AF_INET
    int h_length;       //address length    IP地址长度,IPv4:4字节 IPv6:16字节 值为4或16
    char **h_addr_list; //address list      (重要)通过此变量以整数形式保存域名对应IP地址。当多个IP对应同一域名时,通过此变量获取IP地址信息
}

//为什么h_addr_list使用char类型而不是int类型:
//hostent并非只为IPV4准备,h_addr_list指向数组中也可保存IPV6地址信息,考虑到通用性声明为char指针。

利用IP地址获取域名

#include<netdb.h>

@param addr:    含有IP地址信息的in_addr结构体指针。为同时传递IPv4地址以外的其他信息,声明为char
@param len:     向addr传递的地址信息的字节数,IPv4时取4,IPv6时取16
@param family:  传递地址族信息,IPv4时为AF_INET,IPv6时为AF_INET6
struct hostent * gethostbyaddr(const char * addr,socklen_t len,int family);
//成功返回hostent结构体变量地址值,失败返回NULL指针

知识点

域名系统

DNS是对IP地址和域名进行相互转换的系统,其核心是DNS服务器。

域名是什么?

提供网络服务的服务器端也是通过IP地址区分的,但几乎不可能以非常难记的IP地址替换服务器端地址信息。由此域名是赋予服务器的虚拟地址而非实际地址,
需要将虚拟地址转化为实际地址,即IP地址,这个转化的过程由DNS服务器来完成,当需要转化时,向DNS服务器请求转换地址。

注意:  
一般不会轻易改变服务器域名,但会相对频繁的改变服务器IP地址

域名例:www.naver.com
IP地址例:222.122.195.5

通过ping命令可以验证IP数据报是否到达目的地,执行过程中会经过域名->IP地址的转换过程,故可通过此命令查看IP地址。

在Linux系统中输入nslookup也可以知道本机中的默认DNS服务器地址

nslookup

IP地址和域名之间的转换

程序中有必要使用域名吗?

IP地址比域名发生变化的概率更高,一旦注册域名可能永久不变,相较于使用IP地址,使用域名获取IP地址更好一点。

实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Avmfbziu-1642498591561)(https://note.youdao.com/yws/res/1/WEBRESOURCEf91a497adb75e7af06155e74c6035bb1)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vDpODCNs-1642498591561)(https://note.youdao.com/yws/res/8/WEBRESOURCE2fc3dfa4190bf0e0c59ddf658aa6e228)]

gethostbyaddr使用有问题,可能是版本问题,我使用的是Ubuntu11.10版本,找到的Ubuntu64版本的解决方法是:
sudo apt-get install tk-dev tcl-dev build-essential libc6-dev g++-multilib ia32-libs lib32z1-dev lib32gmp3-dev

但我使用上命令后提示无法找到这些包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值