DNS服务器将主机名解析为IP地址。程序可以通过调用getaddrinfo()将主机名解析为IP地址,如果我正确的话,后者会要求DNS服务器执行解析。
在SysV init中,是否有像DNS服务器那样将服务名称解析为端口的守护进程?它是通过阅读/etc/services来做到的吗?getaddrinfo()是否也调用守护进程来执行解析?
我知道inetd读取/etc/services来决定要听哪个套接字。但是inetd似乎没有将服务名称解析为端口,是吗?
谢谢。
发布于 2019-02-14 01:23:57
请注意,getaddrinfo()只在nsswitch.conf定义DNS时才调用DNS。files条目直接从/etc/hosts读取。
基本上,“名称服务开关”函数(NSS)查看/etc/nsswitch.conf,然后动态加载"libnss“例程。例如,您可能有/lib/x86_64-linux-gnu/libnss_files.so.2,这是在nsswitch.conf中提到files时加载的库。
对于主机,nsswitch.conf行可能读到以下内容
hosts: files dns这将告诉名称服务解析器加载"nss_files“库(它将在/etc/hosts中查找),如果失败,则加载"nss_dns”库。调用DNS服务器的是这个库。
对于服务,nsswitch.conf行可能读到以下内容
services: files ldap这将加载"nss_files“库(它将在/etc/services中查找),如果失败,则加载"nss_ldap”库。
有各种不同的后端(文件、db、ldap、nis、compat、dns.)它们决定了名字是如何被解析的。
对于inet条目,如
service time
{
...
}time值在services的NSS映射中查找。如果files在nsswitch.conf中使用,那么它将看到一行
time 37/tcp timserver它告诉inetd绑定到TCP端口37。
https://unix.stackexchange.com/questions/500522
复制相似问题