热门标签 | 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 小结
本章详细介绍了在网络编程中用于主机名和地址转换的关键函数及其用法,帮助开发者更好地理解和使用这些功能。
推荐阅读
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文深入探讨了计算机网络的基础概念和关键协议,帮助初学者掌握网络编程的必备知识。从网络结构到分层模型,再到传输层协议和IP地址分类,文章全面覆盖了网络编程的核心内容。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文深入探讨了传输层的另一个重要协议——用户数据报协议(UDP)。在了解了TCP协议的基础上,我们将详细解析UDP的工作原理、应用场景及其优缺点,帮助读者全面理解为什么需要UDP。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
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社区 版权所有