Як дізнатися, які порти слухаються певним 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.