Перелічити порти, на яких прослуховується PID процесу (бажано, використовуючи інструменти iproute2)?


68

Я хочу перелічити всі порти, які PID зараз слухає.

Як би ви рекомендували мені отримати такі дані про процес?


Досить дивно, ssщо немає фільтрації за PID, за винятком сокет-мереж.
poige

Відповіді:


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
ThorSummoner

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

Не працювало для мене (на Debian 9). Там вам потрібно похвалитися за ", pid = 1234",
ofrommel

@ofrommel дякую за підказку - я адаптував відповідь.
jofel

Крім того, це працює лише з дозволами root :)
ofrommel

56

Мені не відомий спосіб використання 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для цього, щоб визначити прискіпливість кожного процесу прослуховування.

netstat - друкуйте мережеві з'єднання, таблиці маршрутів, статистику інтерфейсів, маскарадні з'єднання та членство в багатоадресному режимі

-a, - всі показують розетки як для прослуховування, так і для прослуховування (для TCP це означає встановлені з'єднання). За допомогою параметра --interfaces показуйте інтерфейси, які не позначені

- числовий, -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.