O netstat -ntap não mostra o nome do pid / processo para algumas conexões?

10

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 -ntapsaí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.


fonte
2
Você tem certeza de executá-lo como root ou com sudo?
Dom
Sim, foi executado no root e até no root via sudo. mesmo efeito.
Tem certeza de que não estava fazendo em netstat -ntapvez de netstat ntap?
Kyle Brandt
Tenho certeza de que estava fazendo netstat -ntap- exatamente como escrevi. pois é assim que as opções são dadas ao netstat de acordo com sua página de manual.
Nota lateral - Acabei de verificar e parece que o netstat não reconhece as opções fornecidas sem "-".

Respostas:

4

Isso ocorrerá com processos do kernel como o NFS, mas também ocorre ocasionalmente com aplicativos comuns: o RHEL 5 tem o mesmo comportamento.

# netstat -taupen | grep 30715
tcp        0      0 0.0.0.0:30715           0.0.0.0:*               LISTEN      66558      81467710   - 

Observe que lsof, por outro lado, exprime corretamente:

# lsof -i:30715
AppName 1598 useracct   78u     IPv4           81467710                   TCP *:30715 (LISTEN)
mikemaccana
fonte
3
198_141:~ # netstat  -anp|grep 33000
tcp        0      0 0.0.0.0:53000           0.0.0.0:*               LISTEN       -                   
198_141:~ # lsof -i:33000
COMMAND   PID USER   FD   TYPE     DEVICE SIZE NODE NAME
vsftpd  28147 root    3u  IPv4 4089990174       TCP *:33000 (LISTEN)
198_141:~ # id
uid=0(root) gid=100(users) groups=16(dialout),100(users)
198_141:~ # 

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

Yans Ruan
fonte
1

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 é.

mulher
fonte
Definitivamente, essas não são conexões baseadas no kernel, pois são conexões ao banco de dados do aplicativo.
Saída do netstat -atnp | grep EST?
Womble
isto é o que o meu problema é - conexões são listados por em vez do nome do programa / pid eu tenho "-"
3
E eu gostaria de ver o que realmente está acontecendo, em vez de uma interpretação disso.
Womble
Não posso mostrar toda a saída, pois ela contém nomes que podem ser usados ​​para identificar o ambiente. a linha para esta porta específica é semelhante a esta: "tcp 0 0 localhost: 36949 localhost: 6543 ESTABELECIDO -"
1

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
Pascal: Você executou este comando com sudo ou como root?
Stefan Lasiewski
0

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:

  1. 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.

  2. então / proc / net / tcp é verificado para obter informações do soquete tcp (pela função tcp_info), incluindo o inode do soquete.

  3. 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.

zenkj
fonte