Eu tenho um servidor ubuntu / hardy, com o kernel 2.6.24-23-server e netstat:
# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)
O problema é que temos muitas conexões ESTABELECIDAS que não mostram o PID nem o nome do programa na netstat -ntap
saída. O Netstat foi chamado de raiz, não há chroots, grsecurity, nem nada assim (ou assim me disseram :).
Alguma idéia do que pode estar errado?
ATUALIZAR
lsof -n -i
funciona bem e mostra o nome do processo / pid para as conexões.
netstat -ntap
vez denetstat ntap
?netstat -ntap
- exatamente como escrevi. pois é assim que as opções são dadas ao netstat de acordo com sua página de manual.Respostas:
Isso ocorrerá com processos do kernel como o NFS, mas também ocorre ocasionalmente com aplicativos comuns: o RHEL 5 tem o mesmo comportamento.
Observe que lsof, por outro lado, exprime corretamente:
fonte
na minha opinião, pode haver duas situações:
1) A permissão normal do usuário de privilégio "netstat" não pode ver os processos iniciados pelo root
2) alguns processos são executados no kernel
fonte
Para conexões estabelecidas, isso só deve acontecer para conexões iniciadas no espaço do kernel, como NFS ou DRBD. Obviamente, as conexões em espera poderiam ter o processo morrido por baixo delas. Se você não conseguir descobrir o que está causando uma determinada conexão, cole a saída e alguém poderá lhe dizer o que é.
fonte
Eu tenho o mesmo comportamento e meu palpite é que o comportamento do netstat pode ter sido alterado. Por exemplo, vejo a porta e o programa para 'wget', mas não para os processos PHP Apache, que são os mais importantes para mim.
Solução alternativa: reescrevi meu script para usar lsof (veja a dica acima)
fonte
Chegue aqui porque hoje em dia encontro a mesma pergunta no ubuntu 18.04 LTS (netstat é a mesma versão netstat 1.42 (2001-04-15)), estranho ainda sem resposta após 8 anos. Depois de navegar no código fonte do net-tools, posso encontrá-lo.
No código-fonte do netstat:
todas as pastas de processo em / proc são iteradas, cada diretório fd no / proc // fd é verificado para criar um mapa do socket inode para o pid / progname.
então / proc / net / tcp é verificado para obter informações do soquete tcp (pela função tcp_info), incluindo o inode do soquete.
ao emitir as informações do soquete tcp, o pid / progname é consultado no mapa na etapa 1, através do inode do soquete. se nada for encontrado, '-' gera.
Se o soquete for criado após a construção do mapa, o pid / progname não será encontrado no mapa.
fonte