LV06-03-网络编程-08-域名解析
本文主要是网络编程——域名解析的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
SecureCRT | Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日 |
开发板 | 正点原子 i.MX6ULL Linux阿尔法开发板 |
uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) |
linux内核 | linux-4.15(NXP官方提供) |
STM32开发板 | 正点原子战舰V3(STM32F103ZET6) |
点击查看本文参考资料
参考方向 | 参考原文 |
--- | --- |
一、域名解析
前边在学习网络编程的一些基本知识的时候,其实已经了解过域名解析的流程了,所以这里就直接记录在C
语言中,有关域名解析的相关API
函数。
1. gethostbyname()
函数
1.1 函数说明
在linux
下可以使用man 3 gethostbyname
命令查看该函数的帮助手册。
1 | /* 需包含的头文件 */ |
【函数说明】该函数可以通过域名获取IP
地址。
【函数参数】
name
:char
类型指针变量,表示要转换的域名(其实也可以填一个IP
地址)。
【返回值】struct hostent
类型结构体指针变量,成功返回一个包含了解析后IP
地址的hostent
结构体变量的地址,失败返回NULL
。
【使用格式】none
【注意事项】none
1.2 struct hostent
我们来了解一下上边通过域名获取IP
地址的函数的返回值,我们在使用man 3 gethostbyname
查看帮助手册的时候,下边有这个结构体说明:
1 | struct hostent |
【成员说明】
h_name
:char
类型指针变量,表示官方域名(Official domain name
)。h_aliases
:char
类型二级指针真,表示域名的别名,可以通过多个域名访问同一主机。同一IP
地址可以绑定多个域名,因此除了当前域名还可以指定其他域名。h_addrtype
:int
类型,gethostbyname()
不仅支持IPv4
,还支持IPv6
,可以通过此成员获取IP
地址的地址族(地址类型)信息,IPv4
对应AF_INET
,IPv6
对应AF_INET6
。h_length
:int
类型,该成员保存IP
地址长度。IPv4
的长度为4
个字节,IPv6
的长度为16
个字节。h_addr_list
:char
类型二级指针,这是最重要的成员。通过该成员以整数形式保存域名对应的IP
地址。对于用户较多的服务器,可能会分配多个IP
地址给同一域名,利用多个服务器进行均衡负载。
【成员结构图】感觉上边那样写好像不是很明显,可以看一下下边的图:
1.3 使用实例
点击查看实例
1 |
|
在终端执行以下命令编译程序:
1 | gcc test.c -Wall # 生成可执行文件 a.out |
然后,终端会有以下信息显示:
1 | Aliases 1: www.baidu.com |