J'ai un serveur ubuntu / hardy, avec le noyau 2.6.24-23-server et netstat:
# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)
Le problème est que nous avons beaucoup de connexions ESTABLISHED qui ne montrent pas le PID ni le nom du programme en netstat -ntap
sortie. Netstat a été appelé depuis root, il n'y a pas de chroots, de grsecurity, ni rien de ce genre (du moins, m'a-t-on dit :).
Avez-vous une idée de ce qui pourrait être faux?
METTRE À JOUR
lsof -n -i
fonctionne correctement et affiche le nom pid / process pour les connexions.
netstat -ntap
place denetstat ntap
?netstat -ntap
- comme je l'ai écrit. car c'est la façon dont les options sont données à netstat selon sa page de manuel.Réponses:
Cela se produira avec des processus du noyau comme NFS, mais se produit également occasionnellement avec des applications régulières: RHEL 5 a le même comportement.
Notez que lsof, d'autre part, les mots correctement:
la source
à mon avis, il pourrait y avoir deux situations:
1) l'utilisateur privilégié normal excute "netstat" ne peut pas voir les processus lancés par root
2) certains processus s'exécutent dans le noyau
la source
Pour les connexions établies, cela ne devrait se produire que pour les connexions qui sont lancées à partir de l'espace du noyau, comme NFS ou DRBD. De toute évidence, les connexions en attente auraient pu faire mourir le processus en dessous. Si vous ne pouvez pas déterminer la cause d'une connexion donnée, collez la sortie et quelqu'un peut vous dire de quoi il s'agit.
la source
J'ai le même comportement et je suppose que le comportement netstat peut avoir changé. Par exemple, je vois le port et le programme pour 'wget', mais pas pour les processus PHP Apache, qui sont les plus importants pour moi.
Solution: j'ai réécrit mon script pour utiliser lsof à la place (voir l'indice ci-dessus)
la source
J'arrive ici car ces jours-ci je rencontre la même question sur ubuntu 18.04 LTS (netstat est la même version netstat 1.42 (2001-04-15)), étrange toujours pas de réponse après 8 ans. Après avoir parcouru le code source de net-tools, je peux le trouver.
Dans le code source netstat:
tous les dossiers de processus dans / proc sont itérés, chaque fd dans le répertoire / proc // fd est vérifié pour construire une carte de l'inode de socket vers pid / progname.
Ensuite, / proc / net / tcp est vérifié pour obtenir les informations de socket tcp (par la fonction tcp_info), y compris l'inode de socket.
lors de la sortie des informations de socket tcp, le pid / progname est interrogé à partir de la carte à l'étape 1 via l'inode de socket. si rien n'est trouvé, '-' sort.
Si le socket est créé après la construction de la carte, le pid / progname ne sera pas trouvé dans la carte.
la source