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

netstat показывает порт прослушивания без pid, а lsof - нет

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

Я перепробовал все оттуда, просмотрел журналы и т. Д. И ничего не нашел.

Моя netstat показывает порт прослушивания TCP и порт UDP без pid. Когда я ищу эти порты в lsof, ничего не появляется.

netstat -lntup
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:44231           0.0.0.0:*               LISTEN      -               
udp        0      0 0.0.0.0:55234           0.0.0.0:*                           - 

Следующие команды ничего не отображают:

lsof | grep 44231
lsof | greo 55234
fuser -n tcp 44231
fuser -n udp 55234

После перезагрузки остаются те же два соединения, за исключением новых номеров портов:

netstat -lntup
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:45082           0.0.0.0:*               LISTEN      -               
udp        0      0 0.0.0.0:37398           0.0.0.0:*                           - 

И снова команды lsof и fuser ничего не показывают.

Есть идеи, что они есть? Стоит ли о них беспокоиться?

Некоторые процессы / идентификаторы доступны только для root. Пытаться

sudo netstat -antlp

он должен возвращать pid каждого открытого порта, который не находится в состоянии TIME_WAIT

Из предоставленных вами данных я бы сказал, что это связано с некоторыми монтировками NFS или чем-то еще, использующим RPC.

вы можете проверить с rpcinfo -p для портов, которые могут использоваться некоторыми службами, связанными с RPC.

Вот как это выглядит в моей системе

# netstat -nlp | awk '{if ($NF == "-")print $0}'
tcp        0      0 0.0.0.0:55349           0.0.0.0:*               LISTEN      -               
udp        0      0 0.0.0.0:18049           0.0.0.0:*                           - 

# rpcinfo -p
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  10249  status
    100024    1   tcp  10249  status
    100021    1   udp  18049  nlockmgr
    100021    3   udp  18049  nlockmgr
    100021    4   udp  18049  nlockmgr
    100021    1   tcp  55349  nlockmgr
    100021    3   tcp  55349  nlockmgr
    100021    4   tcp  55349  nlockmgr

Основываясь на подсказке от @ user202173 и других, я смог использовать следующее, чтобы отследить процесс, которому принадлежит порт, даже если он указан как - в netstat.

Вот и была моя исходная ситуация. sudo netstat показывает порт с PID / программой -. lsof -i ничего не показывает.

$ sudo netstat -ltpna | awk 'NR==2 || /:8785/'
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::8785                 :::*                    LISTEN      -
tcp6       1      0 ::1:8785                ::1:45518               CLOSE_WAIT  -
$ sudo lsof -i :8785
$

А теперь поехали на рыбалку. Сначала давайте получим индексный дескриптор, добавив -e нашим netstat вызов.

$ sudo netstat -ltpnae | awk 'NR==2 || /:8785/'
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp6       0      0 :::8785                 :::*                    LISTEN      199179     212698803   -
tcp6       1      0 ::1:8785                ::1:45518               CLOSE_WAIT  0          0           -

Следующее использование lsof чтобы прикрепить процесс к этому inode.

$ sudo lsof | awk 'NR==1 || /212698803/'
COMMAND      PID    TID                USER   FD      TYPE             DEVICE   SIZE/OFF       NODE NAME
envelope_ 145661 145766               drees   15u     IPv6          212698803        0t0        TCP *:8785 (LISTEN)

Теперь мы знаем идентификатор процесса, поэтому можем посмотреть на процесс. И, к сожалению, это прерванный процесс. И его PPID равен 1, поэтому мы также не можем убить его родителя (см. Как я могу убить процесс, родителем которого является init?). Теоретически init может со временем очистить его, но я устал ждать и перезагрузился.

$ ps -lf -p 145661
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
0 Z drees    145661      1  2  80   0 -     0 exit   May01 ?        00:40:10 [envelope] <defunct>

Я не знаю, что это конкретно, но модули ядра (например, NFS) не имеют PID для связи с этими сокетами. Поищите что-нибудь подозрительное в lsmod.

Не знаю, может ли это быть полезно. У меня была та же проблема, и я сделал следующее: сначала я вызвал netstat с параметрами -a (все) и -e (расширенный). В последнем варианте я вижу индексный дескриптор, связанный с используемым портом. Затем я вызвал lsof | grep с полученным номером inode и получил PID процесса, связанного с этим inode. В моем случае это сработало.

Есть ли трафик, идущий или исходящий из этого порта, проверьте это с помощью tcpdump -vv -x s 1500 port 37398 -w trace.out Сохраняет ваш снимок в файле trace.out, который затем можно открыть с помощью wirehark или tcpdump -vv port 37398 и посмотреть, что происходит прямо.

Попробуйте подключиться к этому порту по telnet, используя netcat для сокета udp, возможно, вы получите какой-то баннер, который поможет.

Получите rkhunter и проверьте свою систему на наличие бэкдора.

Сравните хэш md5 lsof / netstat с хешем с вашего установочного носителя, предполагая, что файлы не обновляются.