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

27

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

netstat -XXX | grep 8080
timpone
источник
Это в домашней обстановке или в профессиональной среде?
Лукас Кауфман
хорошо, воссоздавая серверный 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
  • как ты?

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

CDSU
источник
-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
Tomachi
источник
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'
Suhas
источник