Services

是否有將服務名稱解析為埠的守護程序?

  • February 17, 2019

DNS 伺服器將主機名解析為 IP 地址。一個程序可以通過呼叫將主機名解析為 IP 地址getaddrinfo(),如果我是正確的,它反過來要求 DNS 伺服器進行解析。

在 SysV init 中,是否有一些守護程序將服務名稱解析為埠,就像 DNS 伺服器一樣?它通過閱讀來做到這一點/etc/services嗎?是否getaddrinfo()還呼叫守護程序來執行解析?

我知道inetd讀取 /etc/services 決定要聽哪些套接字。但inetd似乎沒有將服務名稱解析為埠,是嗎?

謝謝。

請注意,getaddrinfo()僅在定義 DNS 時才呼叫nsswitch.conf它。該files條目直接從 讀取/etc/hosts

基本上,“名稱服務切換”功能(NSS)查看/etc/nsswitch.conf然後可以動態載入“libnss”常式。因此,例如,您可能有,這是在中提到/lib/x86_64-linux-gnu/libnss_files.so.2時載入的庫。files``nsswitch.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用於nsswitch.conf那麼它會看到一條線

time        37/tcp      timserver

它告訴inetd綁定到 TCP 埠 37。

引用自:https://unix.stackexchange.com/questions/500522