Tengo un servidor ubuntu / hardy, con kernel 2.6.24-23-server y netstat:
# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)
El problema es que tenemos muchas conexiones ESTABLECIDAS que no muestran PID ni el nombre del programa en la netstat -ntap
salida. Netstat fue llamado desde la raíz, no hay chroots, seguridad, ni nada de esto (o eso me dijeron :).
¿Alguna idea de lo que podría estar mal?
ACTUALIZAR
lsof -n -i
funciona bien y muestra el nombre pid / proceso para las conexiones.
netstat -ntap
lugar denetstat ntap
?netstat -ntap
, tal como lo escribí. como esta es la forma en que se dan las opciones a netstat de acuerdo con su página de manual.Respuestas:
Esto ocurrirá con procesos del kernel como NFS, pero también ocurre ocasionalmente con aplicaciones normales: RHEL 5 tiene el mismo comportamiento.
Tenga en cuenta que lsof, por otro lado, las palabras correctamente:
fuente
en mi cebolla, podría haber dos situaciones:
1) el usuario con privilegios normales excute "netstat" no puede ver los procesos iniciados por root
2) algunos procesos se ejecutan en el núcleo
fuente
Para las conexiones establecidas, esto solo debería suceder para las conexiones que se inician desde el espacio del kernel, como NFS o DRBD. Obviamente, las conexiones en espera podrían haber hecho que el proceso muriera debajo de ellas. Si no puede determinar qué está causando una conexión determinada, pegue la salida y alguien puede decirle qué es.
fuente
Tengo el mismo comportamiento y creo que el comportamiento de netstat puede haber cambiado. Por ejemplo, veo el puerto y el programa para 'wget', pero no para los procesos de Apache PHP, que son los más importantes para mí.
Solución alternativa: reescribí mi script para usar lsof en su lugar (vea la sugerencia anterior)
fuente
Llegue aquí porque en estos días me encuentro con la misma pregunta en ubuntu 18.04 LTS (netstat es la misma versión netstat 1.42 (15/04/2001)), extraño aún no hay respuesta después de 8 años. Después de examinar el código fuente de net-tools, puedo encontrarlo.
En el código fuente de netstat:
todas las carpetas de proceso en / proc se repiten, cada fd en el directorio / proc // fd se verifica para construir un mapa desde el inodo del socket al pid / progname.
entonces / proc / net / tcp se verifica para obtener información del socket tcp (mediante la función tcp_info), incluido el inodo del socket.
al generar la información del socket tcp, el pid / progname se consulta desde el mapa en el paso 1 a través del inodo del socket. si no se encuentra nada, '-' sale.
Si el socket se crea después de construir el mapa, el nombre pid / prog no se encontrará en el mapa.
fuente