Ich habe Ubuntu / Hardy Server, mit Kernel 2.6.24-23-Server und Netstat:
# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)
Das Problem ist, dass wir viele ESTABLISHED-Verbindungen haben, die weder PID noch Programmnamen in der netstat -ntap
Ausgabe anzeigen . Netstat wurde von root aufgerufen, es gibt keine Chroots, Grsecurity oder ähnliches (oder so wurde mir gesagt :).
Irgendeine Idee, was falsch sein könnte?
AKTUALISIEREN
lsof -n -i
funktioniert in Ordnung und zeigt den PID- / Prozessnamen für die Verbindungen an.
netstat -ntap
stattnetstat ntap
?netstat -ntap
- genau wie ich geschrieben habe. Auf diese Weise werden netstat Optionen gemäß seiner Manpage gegeben.Antworten:
Dies tritt bei Kernelprozessen wie NFS auf, gelegentlich aber auch bei normalen Apps: RHEL 5 hat das gleiche Verhalten.
Beachten Sie, dass lsof andererseits Wörter richtig:
quelle
In meiner Zwiebel könnte es zwei Situationen geben:
1) Benutzer mit normalem Berechtigungsauszug "netstat" können diese von root gestarteten Prozesse nicht sehen
2) Einige Prozesse werden im Kernel ausgeführt
quelle
Bei hergestellten Verbindungen sollte dies nur für Verbindungen geschehen, die vom Kernel-Space initiiert werden, wie z. B. NFS oder DRBD. Offensichtlich könnten wartende Verbindungen den Prozess unter ihnen zum Erliegen gebracht haben. Wenn Sie nicht herausfinden können, was eine bestimmte Verbindung verursacht, fügen Sie die Ausgabe ein, und jemand kann Ihnen sagen, um was es sich handelt.
quelle
Ich habe das gleiche Verhalten und ich vermute, dass sich das Verhalten von netstat geändert hat. Zum Beispiel sehe ich den Port und das Programm für 'wget', aber nicht für Apache PHP-Prozesse, die für mich wichtiger sind.
Problemumgehung: Ich habe mein Skript neu geschrieben, um stattdessen lsof zu verwenden (siehe Hinweis oben).
quelle
Kommen Sie hierher, weil ich heutzutage auf Ubuntu 18.04 LTS auf dieselbe Frage stoße (netstat ist dieselbe Version netstat 1.42 (15.04.2001)), seltsamerweise nach 8 Jahren immer noch keine Antwort. Nachdem ich den Quellcode von Net-Tools durchsucht habe, kann ich ihn finden.
Im netstat-Quellcode:
Alle Prozessordner in / proc werden iteriert. Jedes fd im Verzeichnis / proc // fd wird überprüft, um eine Zuordnung von Socket Inode zu PID / Progname zu erstellen.
Anschließend wird / proc / net / tcp überprüft, um Informationen zum TCP-Socket (von der Funktion tcp_info) einschließlich des Socket-Inodes abzurufen.
Bei der Ausgabe der TCP-Socket-Informationen wird die PID / Prognose in Schritt 1 über den Socket-Inode von der Karte abgefragt. Wenn nichts gefunden wird, wird '-' ausgegeben.
Wenn der Socket nach dem Erstellen der Karte erstellt wird, wird die PID / Prognose nicht in der Karte gefunden.
quelle