热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UNP第9章:主机名与地址转换

本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。
### 9.1 概述
本章主要讨论了用于在主机名和数值地址之间进行转换的函数,包括gethostbyname、gethostbyaddr、getservbyname和getservbyport。这些函数在处理网络编程时非常重要。

### 9.2 域名系统(DNS)
域名系统(DNS)主要用于将主机名映射为IP地址。主机名可以是简单名称(如solaris或bsdi),也可以是全限定域名(FQDN,如solaris.kohala.com)。DNS中的资源记录(RR)类型包括:
- **A记录**:将主机名映射为32位IPv4地址。
- **AAAA记录**:将主机名映射为128位IPv6地址。
- **PTR记录**:将IP地址映射为主机名。
- **MX记录**:指定邮件交换器。
- **CNAME记录**:提供规范名字(canonical name),常用于ftp和www服务。

#### 解析器和名字服务器
组织通常运行一个或多个名字服务器(如BIND),应用程序通过解析器库中的函数与DNS服务器交互。最常用的解析器函数是gethostbyname和gethostbyaddr。文件/etc/resolv.conf包含本地名字服务器的IP地址。

#### DNS替代方法
不使用DNS的情况下,可以通过静态主机文件(如/etc/hosts)或网络信息系统(NIS)获取名字和地址信息。

### 9.3 gethostbyname函数
此函数用于将主机名转换为IP地址。其原型如下:
```c
#include
struct hostent *gethostbyname(const char *hostname);
```
返回的非空指针指向hostent结构体,包含主机的官方名称、别名、地址类型等信息。错误时设置全局变量h_errno。

### 9.4 RES_USE_INET6解析器选项
RES_USE_INET6选项用于支持IPv6查询。

### 9.5 gethostbyname2函数与IPv6支持
此函数允许指定地址族,以支持IPv6:
```c
#include
struct hostent *gethostbyname2(const char *hostname, int family);
```

### 9.6 gethostbyaddr函数
此函数用于将IP地址转换为主机名:
```c
#include
struct hostent *gethostbyaddr(const char *addr, size_t len, int family);
```

### 9.7 uname函数
uname函数用于获取系统的相关信息,如操作系统名称、节点名称等:
```c
#include
int uname(struct utsname *name);
```

### 9.8 gethostname函数
此函数用于获取本地主机名:
```c
#include
int gethostname(char *name, size_t namelen);
```

### 9.9 getservbyname和getservbyport函数
这些函数用于在服务器名和端口号之间进行转换。例如:
```c
#include
struct servent *getservbyname(const char *servname, const char *protoname);
struct servent *getservbyport(int port, const char *protname);
```

### 9.10 其他网络相关信息
其他相关网络信息可以通过各种工具和命令行工具获取。

### 9.11 小结
本章详细介绍了在网络编程中用于主机名和地址转换的关键函数及其用法,帮助开发者更好地理解和使用这些功能。
推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • This request pertains to exporting the hosted_zone_id attribute associated with the aws_rds_cluster resource in Terraform configurations. The absence of this attribute can lead to issues when integrating DNS records with Route 53. ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 本文详细解释了华为ENSP模拟器中常用的命令,涵盖用户模式、系统模式、接口模式和地址池视图模式下的操作。这些命令对于进行计算机网络实验至关重要,帮助用户更好地理解和配置路由器及PC机的通信。 ... [详细]
  • 本文介绍了如何在 Node.js 中使用 `setDefaultEncoding` 方法为可写流设置默认编码,并提供了详细的语法说明和示例代码。 ... [详细]
author-avatar
峡谷人123_742
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有