是否有將服務名稱解析為埠的守護程序?
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。