我应该在 drivers\etc\services 文件中注册我使用的端口吗?

我应该在 drivers\etc\services 文件中注册我使用的端口吗?

我正在开发一项使用端口与客户端应用程序讨论的 Windows 服务。

我看到该C:\Windows\System32\drivers\etc\services文件中注册了Windows使用的端口,以及一些非Windows开发的应用程序使用的端口。

我是否应该将我的服务使用的端口附加到该文件中?它是否有用,还是仅供参考?

答案1

/etc/services该文件基本上只是旧版 BSD 的副本– 因为 Windows 使用相同的“BSD 套接字”API,甚至引入了各种客户端程序(FTP远程登录響鳴手指要从该函数中获取任何命令,需要一个services文件才能getservbyname()正常工作。

在 Unix 上,各种互联网服务器和客户端过去常常调用getservbyname()来查明它们应该监听哪个端口;getservbyname("finger", "tcp")将返回端口 79。但是当它/etc/hosts被 DNS 取代时,/etc/services却没有——因此随着网站数量的增长,它很快就会过时。

我猜是因为这个原因,程序停止使用getservbyname()并开始使用自己的配置文件或硬编码端口号。我认为只有inetd守护进程(及其xinetd继任者)仍使用服务名称作为其配置的一部分。只有像远程登录或者FTP使用服务名称进行连接。

如今,该文件主要是信息性的——例如,该netstat程序可以将端口转换为服务名称,就像将 IP 地址转换为主机名一样。

$ netstat -lt
活动互联网连接(仅限服务器)
Proto Recv-Q Send-Q 本地地址 外部地址 状态      
tcp 0 0 *:pulse-native *:* 监听     
tcp6 0 0 [::]:mpd [::]:* 侦听     
tcp6 0 0 [::]:pulse-native [::]:* 侦听     
tcp6 0 0 [::]:netbios-ssn [::]:* 侦听     
tcp6 0 0 [::]:finger [::]:* 侦听     
tcp6 0 0 [::]:auth [::]:* 侦听     

我确信在 Windows 上,这个文件的使用率甚至更低——除了相同的FTP远程登录工具。

相关内容