Як дізнатися, які порти слухаються певним PID?


13

У мене є ПІД певного процесу, який прослуховує деякі порти на моїй ОС X, і мені потрібно знати, який порт (и) прослуховується цим процесом. Як я можу це зробити?

Я знаю, що можу використовувати, lsofщоб знати, який процес прослуховує якийсь порт, але мені потрібно виконати зворотну операцію.

Дякую.

UPD

OS X використовує утиліти BSD, тому у мене BSD netstatне Linux netstat. У Linux netstatє -pможливість показу PID, BSD netstatвикористовує -pдля визначення порту і не має можливості показу PID.


Ви хочете сказати, що ви намагаєтеся знайти порти, які слухає процес? netstatможе зробити це за вас. Ви можете grepна PID, якщо хочете відфільтрувати вихідnetstat
Centimane

також lsofвикористання не є одним із способів. ви можете зробити щось подібне lsof|grep ${PID}. який грубо скине все і grepпідбере лінії з PID в них. У випадковому випадку він може відобразити нерелевантний рядок, оскільки номер PID помилково відповідає іншому значенню, але шанси малі - жоден
MelBurslan

@ Даве, так, ти йдеш за мною правильно. Алек, як я бачу, версія BSD netstatне може відображати PID.
шау-коте

@MelBurslan це не схоже на акуратне рішення. Більше того, це не швидко - це вимагає деякого часу на моєму MBP.
shau-kote

Відповіді:


13

Я знайшов рішення самостійно глибоким читанням man lsof. (Так, RT * M все ще допомагає.) Дякую @Gilles за приціл.

Ось таке рішення: lsof -aPi -p 555 (555 - PID).

Пояснення:

  1. -p вказати номер PID;
  2. -i відображати лише мережеві пристрої;
  3. -a до І двох умов вище (інакше вони будуть ORE);
  4. -P для відображення номерів портів (замість імен портів за замовчуванням).

Крім того, можна використовувати lsof -aPi4 -p 555або lsof -aPi6 -p 55для IPv4 або IP6 адреси лише відповідно.

Якщо вихід буде проаналізований іншим -Fnваріантом програми, може бути корисним. За допомогою цієї опції lsofвийде "вихід для іншої програми" замість придатного форматованого виводу. lsof -aPi4 -Fn -p 555виведе щось подібне:

p554
nlocalhost:4321

PS Все це я перевірив на моєму OS X El Capitan, але, як я бачу, він повинен працювати і на Linux.


6

lsofнадає інформацію про файли, відкриті процесами, включаючи мережеві порти. Він доступний майже на всіх системах Unix, включаючи OSX .

Rosetta Stone для Unix не перелічити будь-який інший інструмент для «процесу матчу до файлу або порту» на OSX.

Щоб перерахувати прослуховування процесів через порт TCP, ви можете використовувати

lsof -iTCP -sTCP:LISTEN

lsof -iUDPперераховує процеси, у яких відкрита розетка UDP. lsof -iперелічує всі відкриті мережеві сокети (TCP-клієнти, TCP-сервери та інші протоколи IP).


0

якщо ви хочете знати, який порт прослуховує, ви можете скористатися опцією -p netstat. Ви повинні бути супер-користувачем:

$ sudo netstat -nlp | grep 80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

якщо ви хочете дізнатися більше про нього, спробуйте це посилання


Йдеться про GNU netstat, у мене ОС X і тому використовую BSD netstat. Він використовує -pдля визначення порту TCP / IP, і він не має можливості відображення PID.
шау-коте

0

На FreeBSD ви можете використовувати sockstatцю інформацію. Я не впевнений, чи є OS X sockstat, оскільки у мене немає Mac.

Наприклад, щоб побачити всі з'єднання TCPv4:

sockstat -4


Alack, sockstatна моєму Mac не існує команди. :(
shau-kote

0

Ви можете об'єднати netstat з grep, awk і sed, щоб показати порти з відповідними підписками на Linux і Cygwin:

$ netstat -ano | grep LISTENING | grep -v ‘\[::\]’ | sort -n | uniq -c | awk ‘ {print $3 “\t” $6}’ | sed ‘s/.*://’

Детальніше

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.