Як використовувати netstat, щоб показати, який процес прослуховується на порту


27

Я перебуваю на ноутбуці OS X Mountain Lion і на ньому є кілька Vagrant короб. Я намагаюся з'ясувати, який процес прослуховується на порту 8080. Мої варіації створюють як сто рядків, але жодна із конкретним номером порту. Я припускаю щось подібне:

netstat -XXX | grep 8080

Це в домашніх умовах чи в професійному середовищі?
Лукас Кауффман

добре, відтворюючи локально сервер. якщо ви хочете перейти на інший сайт, це добре. Різні версії netstat підтримують різні аргументи.
timpone

Добре тоді, сер, тут все здається в порядку, будь ласка, продовжуйте і приємного дня.
Лукас Кауффман

Відповіді:


52

На жаль, на OSX ви застрягли з BSD, netstatякий не покаже вам ідентифікатор процесу, який прикріплений до даного порту. Що ви повинні зробити замість цього - використовувати lsof. Синтаксис, який вам потрібно буде використовувати:

lsof -i :8080

Це дозволить роздрукувати інформаційні сторінки, більшість з яких вас не цікавить, але поля добре позначені. Наприклад, ознайомтеся з цим прикладом виводу.

lsof -i :53237
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
GoogleTal 927 guest   29u  IPv4 0x2c3f7f95244855c3      0t0  TCP localhost:53237 (LISTEN)

Це говорить мені про те, що порт 53237 використовується за допомогою ідентифікатора процесу 927. Читаючи поле COMMAND, майте на увазі, що цей вихід урізаний, насправді повна назва двійкового файлу - GoogleTalkPlugin.


THX, це мені стає набагато ближче, це переходить до досить загального VBoxHeadl- чи є спосіб побачити, який екземпляр VirtualBox (у них зараз два) чи я занадто багато запитую (можливо, останній). thx
timpone

@timpone: Я не знаю достатньо про VirtualBox, щоб допомогти вам пройти цей шлях. Ви можете перевірити командний рядок процесу, щоб побачити, чи він у ньому вказаний, або використовувати lsof -p PIDта переглядати список відкритих файлів, поки не знайдете його.
Скотт Пак

круто, THX на допомогу
timpone

8

Це те, що я люблю використовувати, коли шукаю PID порту прослуховування. Для використання в Linux:netstat -tunlp

  • n мережа
  • Я слухаю порти
  • p процес
  • t tcp
  • u udp

Додаткову інформацію можна знайти на сторінках man.


-pне перераховує аргументи до програми. Як я це бачу?
jameshfisher

4
OP запитав про OSX. -p не є опцією для версії netstat для OSX.
Тед Бігхем

-pна OSX є port. Я ненавиджу рішення розробників робити різні аргументи для OSX та Linux ...
Daniel W.

5

Я працював над модифікацією netstatна OS X, щоб забезпечити цю функцію, і натрапив на той факт, що -vдасть вам прив’язку, пов'язану з сокетом.


Збільшується -vрівень багатослів’я, і це документально підтверджується. developer.apple.com/library/mac/documentation/Darwin/Reference/…
Leathe

1
Вибачте, я мав на увазі той факт, що він друкує PID, не задокументований, не те, що варіант існує.
Шон Гамільтон

4

Для мене наступні два рядки найкраще показують, які програми відкриті порти прослуховування, а tunnel, lsof є повністю кросплатформенним:

netstat -Watn | grep LISTEN
lsof -Pnl +M -i -cmd | grep LISTEN

1

Щоб дізнатися конкретний порт, використовуйте команду netstat нижче

  netstat -an | grep ':8080'

3
ОП запитала про отримання процесу. Це не відображає ідентифікатор процесу.
Тед Бігхем

1

Від людини netstat

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

Я зазвичай просто роблю це: netstat -antup | греп 8080


хм ... це звучить як те, що я хотів би, але це дає мені різні варіанти в OS X для -p-p protocol Show statistics about protocol, which is either a well-known name
timpone

@timpone: -pдля відображення PID є командою netstat GNU, тоді як OSX використовує BSD netstat.
Скотт Пак

-pне перераховує аргументи до програми. Як я це бачу?
jameshfisher

1
OP запитав про OSX. -p не є опцією для версії netstat для OSX.
Тед Бігхем

-pна OSX є port. Я ненавиджу рішення розробників робити різні аргументи для OSX та Linux ...
Daniel W.

0

Наведена нижче команда показує з'єднання:

netstat -antop | grep :8080

Для перегляду повного потоку в режимі реального часу ви можете використовувати watch:

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