У меня есть сервер Ubuntu / Hardy, с ядром 2.6.24-23-сервер и netstat:
# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)
Проблема в том, что у нас есть много УСТАНОВЛЕННЫХ соединений, которые не показывают PID или имя программы в netstat -ntap
выходных данных. Netstat был вызван из root, нет никаких chroot, grsecurity или чего-либо подобного (или мне так сказали :).
Есть идеи, что может быть не так?
ОБНОВИТЬ
lsof -n -i
работает нормально, и показывает pid / имя процесса для соединений.
netstat -ntap
вместоnetstat ntap
?netstat -ntap
- так же, как я написал. так как таким способом параметры задаются netstat в соответствии с его страницей руководства.Ответы:
Это происходит с процессами ядра, такими как NFS, но иногда происходит и с обычными приложениями: RHEL 5 ведет себя так же.
Обратите внимание, что lsof, с другой стороны, правильно произносит слова:
источник
по моему мнению, могут быть две ситуации:
1) обычный пользователь с привилегиями «netstat» не может видеть те процессы, запущенные пользователем root
2) некоторые процессы запускаются в ядре
источник
Для установленных соединений это должно происходить только для соединений, которые инициируются из пространства ядра, таких как NFS или DRBD. Очевидно, что ожидание соединений могло привести к тому, что процесс умирает под ними. Если вы не можете понять, что является причиной данного соединения, вставьте вывод, и кто-то может сказать вам, что это такое.
источник
У меня такое же поведение, и я думаю, что поведение netstat могло измениться. Например, я вижу порт и программу для 'wget', но не для процессов Apache PHP, которые для меня важнее.
Обходной путь: я переписал свой сценарий, чтобы использовать вместо него lsof (см. Подсказку выше)
источник
Приезжайте сюда, потому что в эти дни я сталкиваюсь с тем же вопросом на Ubuntu 18.04 LTS (netstat - это та же версия, netstat 1.42 (2001-04-15)), но через 8 лет странного ответа нет. После просмотра исходного кода net-tools я могу его найти.
В исходном коде netstat:
все папки процессов в / proc итерированы, каждый fd в каталоге / proc // fd проверяется для построения карты от inode сокета до pid / progname.
Затем проверяется / proc / net / tcp для получения информации о сокете tcp (с помощью функции tcp_info), включая inode сокета.
при выводе информации о сокете tcp pid / progname запрашивается из карты на шаге 1 через inode сокета. если ничего не найдено, выводится '-'.
Если сокет создается после построения карты, pid / progname не будет найден на карте.
источник