Как использовать netstat, чтобы показать, какой процесс прослушивает порт


27

Я использую ноутбук OS X Mountain Lion и у меня есть пара коробок Vagrant. Я пытаюсь выяснить, какой процесс прослушивает порт 8080. Мои варианты выдают сто строк, но ни один из них не имеет определенного номера порта. Я предполагаю что-то вроде:

netstat -XXX | grep 8080

Это в домашней обстановке или в профессиональной среде?
Лукас Кауфман

хорошо, воссоздавая серверный enviro локально. если вы хотите перейти на другой сайт, это нормально. Разные версии netstat поддерживают разные аргументы.
Тимпон

Хорошо, сэр, здесь все в порядке, пожалуйста, продолжайте и хорошего дня.
Лукас Кауфман

Ответы:


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 (есть два прямо сейчас), или я спрашиваю слишком много (вероятно, последний). ТНХ
timpone

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

круто, спасибо за помощь
timpone

8

Это то, что мне нравится использовать при поиске PID порта прослушивания. Для Linux используйте:netstat -tunlp

  • н сеть
  • л порты прослушивания
  • р процесс
  • t tcp
  • как ты?

Дополнительную информацию можно найти на страницах руководства.


-pне перечисляет аргументы программы. Как я это вижу?
jameshfisher

4
ОП спросил про OSX. -p не является опцией для OSX-версии netstat.
Тед Бигхам

-pна OSX есть port. Я ненавижу решения разработчиков приводить разные аргументы для OSX и Linux ...
Дэниел В.

5

Я был в процессе модификации netstatв OS X, чтобы обеспечить эту функцию, и наткнулся на тот факт, что -vдаст вам pid, связанный с сокетом.


-vПовышает уровень детальности и документировано. developer.apple.com/library/mac/documentation/Darwin/Reference/…
Leathe

1
извините, я имел ввиду тот факт, что на нем печатается PID, не документированный, а не то, что опция существует.
Шон Гамильтон

4

Для меня следующие две строки лучше всего показывают, какие приложения имеют открытые порты прослушивания, а туннель lsof полностью кроссплатформенный:

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

1

Чтобы узнать конкретный порт, используйте команду netstat ниже

  netstat -an | grep ':8080'

3
ОП спросил о получении процесса. Это не показывает идентификатор процесса.
Тед Бигхам

1

От человека нетстать

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

Я обычно просто делаю это: netstat -antup | grep 8080


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

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

-pне перечисляет аргументы программы. Как я это вижу?
jameshfisher

1
ОП спросил про OSX. -p не является опцией для OSX-версии netstat.
Тед Бигхам

-pна OSX есть port. Я ненавижу решения разработчиков приводить разные аргументы для OSX и Linux ...
Дэниел В.

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.