Список портов, которые прослушивает PID процесса (желательно с помощью инструментов iproute2)?


68

Я ищу список всех портов, которые в настоящее время прослушивает PID.

Как бы вы посоветовали мне получить такие данные о процессе?


Как ни странно, ssфильтрация по PID отсутствует, за исключением сокетов netlink.
Пой

Ответы:


56

Вы можете использовать ssиз пакета iproute2 (который похож на netstat):

ss -l -p -n | grep "pid=1234,"

или (для более старой версии iproute2):

ss -l -p -n | grep ",1234,"

Замените 1234 на PID программы.


3
Существует также -uили -tдля UDB или TCP только. : +1: И все они могут быть сложены следующим образом:, ss -tlnpИ чтобы исключить вывод ширины заливки, что, как я нахожу, раздражает, вы можете ss -tlnp | cat
передать это

1
Я вошел в привычку ss -nlp | cat, это примерно, покажи мне процессы прослушивания (-l), их номера портов (-n) и информацию о своих процессах (-p), и не пытайтесь приспособить вывод к моей оболочке | cat( или меньше или что угодно). Мне потребовалось два года, чтобы привыкнуть к этому: D
ThorSummoner

У меня не сработало (на Debian 9). Там вам нужно grep для ", pid = 1234,"
ofrommel

@ofrommel спасибо за подсказку - я адаптировал ответ.
Джофель

Кроме того, это работает только с правами суперпользователя :)
ofrommel

57

Я не знаю, как использовать iproute2инструменты. Но как обходной путь, вы можете попробовать это.

lsof -Pan -p PID -i

должен дать вам информацию, которую вы ищете.


Выход

lsof -Pan -p 27808 -i
COMMAND   PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
httpd   27808 apache    5u  IPv6 112811294      0t0  TCP *:80 (LISTEN)
httpd   27808 apache    7u  IPv6 112811298      0t0  TCP *:8443 (LISTEN)
httpd   27808 apache    9u  IPv6 112811303      0t0  TCP *:443 (LISTEN)

Я получил эту команду отсюда, но не уверен в точной ссылке, так как все они записаны в записной книжке. Но вы также можете проверить оттуда.


13

Вы можете использовать netstatдля этого, чтобы выяснить pid каждого процесса прослушивания.

netstat - печать сетевых подключений, таблиц маршрутизации, статистики интерфейса, маскарадных подключений и многоадресного членства

-a, --all Показать сокеты как для прослушивания, так и для не прослушивания (для TCP это означает установленные соединения). С опцией --interfaces показывать интерфейсы, которые не помечены

--numeric, -n Показывать числовые адреса вместо попыток определить символические имена хоста, порта или пользователя.

-p, --program Показать PID и имя программы, которой принадлежит каждый сокет.

Вот пример:

# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1507/rpcbind
tcp        0      0 0.0.0.0:51188               0.0.0.0:*                   LISTEN      1651/rpc.statd
tcp        0      0 0.0.0.0:1013                0.0.0.0:*                   LISTEN      1680/ypbind
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1975/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1763/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2081/master
tcp        0      0 127.0.0.1:27017             0.0.0.0:*                   LISTEN      2119/mongod
tcp        0     48 172.16.33.73:22             172.16.127.110:51850        ESTABLISHED 25473/sshd
tcp        0      0 172.16.33.73:22             172.16.127.110:51214        ESTABLISHED 24699/sshd
tcp        0      0 :::111                      :::*                        LISTEN      1507/rpcbind
tcp        0      0 :::9200                     :::*                        LISTEN      1994/java
tcp        0      0 :::9300                     :::*                        LISTEN      1994/java
tcp        0      0 :::22                       :::*                        LISTEN      1975/sshd
tcp        0      0 ::1:631                     :::*                        LISTEN      1763/cupsd
tcp        0      0 ::1:25                      :::*                        LISTEN      2081/master
tcp        0      0 :::59162                    :::*                        LISTEN      1651/rpc.statd

1
Спасибо, хотя меня проинформировали, что netstatэто устарело с помощью инструментов iproute2, и я стараюсь этого избежать.
ThorSummoner

12

Ответ @ jofel показывает вам подходящий инструмент, ssвот замены для других сетевых инструментов в iproute2.

Устаревшие команды и их эквиваленты iproute2 следующие:

deprecated      replacement(s)
==========      ==============
- arp           ip n (ip neighbor)
- ifconfig      ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel      ip tunnel
- iwconfig      iw
- nameif        ip link, ifrename
- netstat       ss, ip route (for netstat-r), ip -s link (for netstat -i), 
                ip maddr (for netstat-g)

- route         ip r (ip route)

Основной список также здесь, в Википедии: http://en.wikipedia.org/wiki/Iproute2 .

Рекомендации


1

Другой способ, lsofесли вы не знаете PID, а просто название программы:

lsof -Pa -p $(pgrep [programName]) -i

не работает с lsof4.89 на Ubuntu 16.04
Палик

1
Это будет иметь место, если программа породила несколько процессов. В этом случае вам нужно будет указать конкретный PID при выполнении команды lsof, которую я дал. pgrep <program name>затем выберите PID, который вам нужен для вышеуказанной команды. замена $(pgrep [programName])на PID #
cryptoboy

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.