Como o SS, e outros programas de rede, procuram um nome de porta a partir de um número de porta?

1

SS, netstat e tcpdump, para nomear alguns programas, converterão um número de porta em um nome quando reconhecidos. Então, uma conexão na porta 22 será mostrada como 'ssh', como um exemplo.

Eu estou querendo saber como esse mapeamento é feito? Eu suponho que os programas não são cada hardcoding uma lista de mapeamentos? Existe um programa ou serviço central responsável por ajudar as redes a mapear o número da porta para o nome?

Pergunta relacionada, quando eu executo o SS na mesma versão do linux (6.9, portanto, um pouco antigo) estou recebendo comportamentos diferentes. Na VM eu estava testando no comando 'ss -a' lista um programa na porta 11001; Em uma máquina de metal com o mesmo sistema operacional & comando a porta é listado como metasys. É fácil consertar meu script para contornar o problema, mas estou curioso para saber por que um serviço reconhece a porta 11001 e o outro não.

    
por dsollen 26.03.2018 / 22:14

1 resposta

6

Geralmente, com a API getservbyport() , que é uma interface para a estrutura Name Service .

É a mesma família de funções que resolve endereços IP para hospedar nomes, nomes de usuários para ids de usuários e assim por diante.

getservbyport() normalmente visualizará /etc/nsswitch.conf (que lista qual banco de dados usar para cada categoria), para a entrada de services .

Se a entrada para services mostrar files , o arquivo /etc/services como um arquivo de texto simples será usado, como /etc/passwd seria usado se files fosse mencionado para passwd (o usuário banco de dados).

Você pode ter outras formas de bancos de dados. Nos sistemas GNU, se houver um banco de dados xyz listado, ele será consultado usando uma biblioteca libnss_xyz.so compartilhada carregada sob demanda.

Diferente de files , os comuns são db , nis , nisplus , ldap ...

Em implantações simples, geralmente é apenas files , então /etc/services .

    
por 26.03.2018 / 22:37