Найти процессы, прослушивающие подстановочный адрес в `lsof`

С помощью lsofЯ могу найти все процессы с сокетом TCP, прослушивающие соединения:

lsof -Pni -sTCP:LISTEN

например:

COMMAND   PID   USER  FD  TYPE  DEVICE SIZE/OFF NODE NAME
cupsd     662   root  7u  IPv6   11108      0t0  TCP [::1]:631 (LISTEN)
cupsd     662   root  8u  IPv4   11109      0t0  TCP 127.0.0.1:631 (LISTEN)
rsyncd    905   root  4u  IPv4   13379      0t0  TCP *:873 (LISTEN)
...

Есть ли способ (без передачи вывода в другую программу, например grep, awk, или же sed) чтобы ограничить это прослушиванием сокетов TCP по подстановочному адресу? Пытался:

$ lsof -Pni @0.0.0.0 -sTCP:LISTEN
lsof: incomplete Internet address specification: -i @0.0.0.0

а также

$ lsof -Pni @\* -sTCP:LISTEN
lsof: unknown host name (*) in: -i @*

В качестве альтернативы, есть ли способ вообще отрицать условия, переданные lsof?

2 ответа

Вы должны использовать lsof?

netstat -tulpn покажет процессы, которые слушают на любом данном порту. Процессы, прослушивающие все IP, будут отображаться как 0.0.0.0:

Это не может быть сделано с lsof, Нет никакого способа указать адрес подстановочного знака без сопоставления только с подстановочным знаком:

lsof -nP -sTCP:LISTEN -i@0.0.0.0:1-65535

Казалось бы, сделать это, но он захватывает как фактический подстановочный адрес (INADDR_ANY), а также семантический "подстановочный знак", то есть любой адрес вообще. Что интересно, [::] неприемлемо для подстановочного знака v6. lsof поддерживает отрицания, но не для адресов, например, вы не можете сделать что-то, чтобы отфильтровать localhost.

Это может быть сделано с ss(8) но имя процесса трудно разобрать.

# ss -nlt src 0.0.0.0
State    Recv-Q    Send-Q        Local Address:Port        Peer Address:Port
LISTEN   0         128                 0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=939,fd=3))

Часть в "" (sshd выше) - это имя процесса, а не имя пользователя, которое вводит в заблуждение метка.

ИМО, как правило, было бы легче отфильтровать lsof выход, чем разобрать ss выход. Или обработать вывод /proc/net/tcp непосредственно.

Другие вопросы по тегам