Mam serwer ubuntu / hardy, z jądrem 2.6.24-23-server i netstat:
# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)
Problem polega na tym, że mamy wiele USTAWIONYCH połączeń, które nie pokazują PID ani nazwy programu na netstat -ntap
wyjściu. Netstat został wywołany z roota, nie ma chrootów, grsecurity, ani niczego takiego (przynajmniej tak mi powiedziano :).
Masz pojęcie, co może być nie tak?
AKTUALIZACJA
lsof -n -i
działa dobrze i wyświetla nazwę pid / process dla połączeń.
netstat -ntap
tego zamiastnetstat ntap
?netstat -ntap
- tak jak napisałem. ponieważ w ten sposób podane są opcje dla netstat zgodnie ze stroną man.Odpowiedzi:
Dzieje się tak w przypadku procesów jądra, takich jak NFS, ale czasami występuje również w przypadku zwykłych aplikacji: RHEL 5 ma takie samo zachowanie.
Zauważ, że lsof z kolei poprawnie słowa:
źródło
w mojej głowie mogą być dwie sytuacje:
1) normalny użytkownik z uprawnieniami do wyceny „netstat” nie widzi procesów uruchomionych przez roota
2) niektóre procesy działają w jądrze
źródło
W przypadku ustanowionych połączeń powinno to nastąpić tylko w przypadku połączeń inicjowanych z przestrzeni jądra, takich jak NFS lub DRBD. Oczywiście czekające połączenia mogły umrzeć pod nimi. Jeśli nie możesz ustalić, co powoduje dane połączenie, wklej dane wyjściowe, a ktoś powie ci, co to jest.
źródło
Mam takie samo zachowanie i domyślam się, że zachowanie netstat mogło się zmienić. Na przykład widzę port i program dla „wget”, ale nie dla procesów Apache PHP, które są dla mnie ważniejsze.
Obejście: Przepisałem skrypt, aby zamiast niego użyć lsof (patrz wskazówka powyżej)
źródło
Przyjedź tutaj, ponieważ w dzisiejszych czasach spotykam to samo pytanie na Ubuntu 18.04 LTS (netstat to ta sama wersja netstat 1.42 (2001-04-15)), dziwne wciąż brak odpowiedzi po 8 latach. Po przejrzeniu kodu źródłowego net-tools mogę go znaleźć.
W kodzie źródłowym netstat:
wszystkie foldery procesu w / proc są iterowane, każdy fd w katalogu / proc // fd jest sprawdzany, aby zbudować mapę z i-węzła gniazda do pid / progname.
następnie sprawdzane jest / proc / net / tcp, aby uzyskać informacje o gnieździe tcp (przez funkcję tcp_info), w tym i-węzeł gniazda.
podczas wyprowadzania informacji o gnieździe tcp, pid / prognoza jest odpytywany z mapy w kroku 1 przez i-węzeł gniazda. jeśli nic nie zostanie znalezione, wypisuje „-”.
Jeśli gniazdo zostanie utworzone po zbudowaniu mapy, pid / prognozy nie zostaną znalezione na mapie.
źródło