是否有一个守护进程可以将服务名称解析为端口?

是否有一个守护进程可以将服务名称解析为端口?

DNS 服务器将主机名解析为 IP 地址。如果我是正确的,程序可以通过调用将主机名解析为 IP 地址,getaddrinfo()然后调用 DNS 服务器来进行解析。

在SysV init中,是否有一些守护进程将服务名称解析为端口,就像DNS服务器一样?它是通过阅读做到这一点的/etc/services吗?是否getaddrinfo()还调用守护进程来执行解析?

我知道inetd读取 是/etc/services 为了决定监听哪些套接字。但inetd似乎没有将服务名称解析为端口,不是吗?

谢谢。

答案1

请注意,仅在定义getaddrinfo()时才调用 DNS 。nsswitch.conffiles条目直接从 读取/etc/hosts

基本上,“名称服务切换”功能(NSS)看看/etc/nsswitch.conf然后可能动态加载“libnss”例程。因此,例如,您可能有,这是在 中提到/lib/x86_64-linux-gnu/libnss_files.so.2时加载的库。filesnsswitch.conf

对于主机,该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在 NSS 映射中查找 的值services。如果files使用 innsswitch.conf那么它会看到一行

time        37/tcp      timserver

它告诉inetd绑定到 TCP 端口 37。

相关内容