Este arquivo é basicamente apenas uma cópia de /etc/services
de uma versão antiga do BSD - já que o Windows usa a mesma API "BSD sockets" e até trouxe vários programas clientes ( ftp , telnet , rsh , finger comandos) dele, ele precisa de um arquivo services
para que a função getservbyname()
funcione.
No Unix, vários servidores e clientes da Internet costumavam chamar getservbyname()
para descobrir qual porta eles deveriam ouvir; getservbyname("finger", "tcp")
retornaria a porta 79. Mas quando /etc/hosts
foi substituído pelo DNS, /etc/services
não foi - por isso, rapidamente ficaria desatualizado à medida que o número de sites aumentasse.
Eu estou supondo que é por causa disso que os programas pararam de usar getservbyname()
e começaram a usar seus próprios arquivos de configuração, ou números de portas codificados. Eu acho que apenas o daemon inetd (e seu sucessor xinetd ) ainda usa nomes de serviço como parte de sua configuração. E somente clientes legados como telnet ou ftp usam os nomes de serviço para se conectar.
Hoje em dia, o arquivo é principalmente informativo - por exemplo, o programa netstat
pode traduzir portas para nomes de serviço, assim como ele traduz endereços IP para nomes de host.
$ netstat -lt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:pulse-native *:* LISTEN tcp6 0 0 [::]:mpd [::]:* LISTEN tcp6 0 0 [::]:pulse-native [::]:* LISTEN tcp6 0 0 [::]:netbios-ssn [::]:* LISTEN tcp6 0 0 [::]:finger [::]:* LISTEN tcp6 0 0 [::]:auth [::]:* LISTEN
No Windows, tenho certeza, o arquivo é usado ainda menos - não me lembro de nenhum programa que o use, além do mesmo ftp e telnet ferramentas.