Назад | Перейти на главную страницу

Сетевой порт открыт, но процесс не подключен?

У меня странная ситуация с открытым сетевым портом. Мой главный вопрос: почему бы не было программы, связанной с открытым TCP-портом:

netstat -ln --program
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      -  

В моем конкретном случае предполагается, что демон nrpe (установка opsview) прослушивает порт 5666, но демон nrpe не запущен. Если я попытаюсь запустить его, он немедленно завершится.

lsof -i :5666 тоже не показывает никаких выходных данных. В моей системе нет (x) inetd.

ОБНОВИТЬ

Да, я запускал эти команды как root. Telnet мог бы, но ответа не последовало.

После дальнейшего расследования я обнаружил ошибку ядра в dmesg: это был экземпляр EC2 (на самом деле их несколько) с более старым ядром (версия 2.6.16 явно нестабильна). Исправление, чтобы остановить сбой, заключалось в обновить ядра.

Похоже, что сбой ядра заставил процесс уйти и оставить порт открытым.

Вы запускали netstat и lsof от имени пользователя root или с помощью sudo? Обратите внимание на последний столбец:

netstat -ln --program
tcp        0      0 192.168.21.1:53         0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      -               
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -

sudo netstat -ln --program
tcp        0      0 192.168.21.1:53         0.0.0.0:*               LISTEN      2566/named      
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      2566/named      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3125/sshd

Из справочной страницы netstat:

Вам также потребуются права суперпользователя, чтобы просматривать эту информацию о сокетах, которыми вы не владеете.

Откуда вы знаете, что никто не работает? Если порт уже используется, имеет смысл немедленно выйти из него с ошибкой «используется сокет». что происходит, когда вы подключаетесь телнетом к порту?

telnet localhost 5666

Порты, открытые ядром, не отображаются с именем программы. На ум приходят некоторые вещи, связанные с NFS и OCFS. Может это как то?

Или это может быть ошибка ядра. Проверьте журналы ядра на наличие OOPS и BUG.

выполнить 'netstat --tcp --udp --listening --program' как пользователь root. в противном случае вам это не даст PID / Название программы

затем используйте команду kill -9 PID

Я смог отследить процесс, получив его индекс через netstat, а затем используя этот индекс с помощью lsof. Смотрите мой более подробный ответ в https://serverfault.com/a/847910/94376.

Я на самом деле написал небольшой сценарий оболочки, чтобы помочь, если возникают эти случайные вопросы:

#! /bin/bash
([ "$1" = "" ] || [ "$2" = "" ]) && echo "Usage: tracer <space> <port>" && exit 0
for i in `fuser -n $1 $2`
 do
  ps aux | grep $i | grep -v 'grep'
 done

сохранить как / usr / local / bin / tracer; вывод:

root@mo-log:/usr/flows# tracer tcp 80
80/tcp:             
root     27904  0.0  0.0 111668  3292 ?        Ss   Aug04   0:03 /usr/sbin/apache2 -k start
www-data 32324  0.0  0.0 335332  3560 ?        Sl   Aug05   0:00 /usr/sbin/apache2 -k start
www-data 32327  0.0  0.0 335324  3560 ?        Sl   Aug05   0:00 /usr/sbin/apache2 -k start

Для его использования вам потребуются права root

Иногда программы, относящиеся к nfs, не отображаются в списке программ.

Кроме того, модули pam LDAP и libnss_ldap открывают соединения с серверами ldap, но нет фактического процесса, удерживающего соединение открытым, поэтому netstat -tnp показывает активное соединение без процесса.