Кто слушает данный порт TCP на Mac OS X?

В Linux я могу использовать netstat -pntl | grep $PORT или fuser -n tcp $PORT, чтобы узнать, какой процесс (PID) прослушивает указанный TCP-порт. Как получить ту же информацию о Mac OS X?

Ответы

Ответ 1

В macOS High Sierra используйте эту команду:

lsof -nP -i4TCP:$PORT | grep LISTEN

В старых версиях используйте одну из следующих форм:

lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN

Замените $PORT номером порта или разделенным запятыми списком номеров портов.

Добавьте sudo (после пробела), если вам нужна информация о портах ниже # 1024.

Флаг -n предназначен для отображения IP-адресов вместо имен хостов. Это заставляет команду выполняться намного быстрее, потому что поиск DNS для получения имен хостов может быть медленным (несколько секунд или минут для многих хостов).

Флаг -P предназначен для отображения необработанных номеров портов вместо разрешенных имен, таких как http, ftp или других эзотерических имен dpserve, socalia как dpserve, socalia.

Смотрите комментарии для получения дополнительной информации.

Ответ 2

Вы также можете использовать:

sudo lsof -i -n -P | grep TCP

Это работает в Mavericks.

Ответ 3

Начиная с Yosemite (10.10), вплоть до Mojave (10.14), каждая версия macOS поддерживает это:

sudo lsof -iTCP -sTCP:LISTEN -n -P

Ответ 4

Обновление января 2016 года

Неудивительно, что никто не предложил:

lsof -i :PORT_NUMBER

чтобы получить необходимую базовую информацию. Например, проверка порта 1337:

lsof -i :1337

Другие варианты, в зависимости от обстоятельств:

sudo lsof -i :1337
lsof -i tcp:1337

Вы можете легко построить это, чтобы извлечь сам PID. Например:

lsof -t -i :1337

который также эквивалентен (в результате) этой команде:

lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID

Краткая иллюстрация:

введите описание изображения здесь

Для полноты, потому что часто используются вместе:

Чтобы убить PID:

kill -9 <PID>
# kill -9 60401

или как один вкладыш:

kill -9 $(lsof -t -i :1337)

Ответ 5

Это работает в Mavericks (OSX 10.9.2).

sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN

Ответ 6

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

Тип:

netstat -anv | grep [.]PORT

вывод будет выглядеть следующим образом:

tcp46      0      0  *.8080                 *.*                    LISTEN      131072 131072   3105      0

PID - это номер перед последним столбцом, 3105 для этого случая

Ответ 7

В macOS простой способ получить ID процесса, который прослушивает определенный порт с помощью netstat. Этот пример ищет процесс, обслуживающий контент через порт 80:

найти сервер, работающий на порту 80

netstat -anv | egrep -w [.]80.*LISTEN

образец вывода

tcp4  0 0  *.80       *.*    LISTEN      131072 131072    715      0

Второй из последнего столбца - это PID. Вверху это 715.

опции

-a - показать все порты, в том числе используемые серверами.

-n - показывать числа, не искать имена. Это делает команду намного быстрее

-v - подробный вывод, чтобы получить идентификаторы процесса

-w - поиск слов. В противном случае команда вернет информацию для портов 8000 и 8001, а не только "80"

LISTEN - предоставлять информацию только для портов в режиме LISTEN, т.е. серверов

Ответ 8

В последней версии macOS вы можете использовать эту команду:

lsof -nP -i4TCP:$PORT | grep LISTEN

Если вам трудно запомнить, то, возможно, вам следует создать функцию bash и экспортировать ее с более дружелюбным именем, например

vi ~/.bash_profile

а затем добавьте следующие строки в этот файл и сохраните его.

function listening_on() {
    lsof -nP -i4TCP:"$1" | grep LISTEN
}

Теперь вы можете набрать listening_on 80 в вашем терминале и посмотреть, какой процесс прослушивает порт 80.

Ответ 9

В Snow Leopard (OS X 10.6.8) работает "man lsof":

lsof -i 4 -a

(фактическая запись вручную - 'lsof -i 4 -a -p 1234')

Предыдущие ответы не работали на Snow Leopard, но я пытался использовать "netstat -nlp", пока не увидел использование "lsof" в ответе pts.

Ответ 10

Я парень Linux. В Linux это очень легко с помощью netstat -ltpn или любой комбинации этих букв. Но в Mac OS X netstat -an | grep LISTEN самый гуманный. Другие очень уродливы и очень трудно запомнить при поиске и устранении неисправностей.

Ответ 11

lsof -n -i | awk '{ print $1,$9; }' | sort -u

Это показывает, кто что делает. Удалите -n, ​​чтобы увидеть имена хостов (немного медленнее).

Ответ 12

Для LISTEN, УСТАНОВЛЕННЫХ и ЗАКРЫТЫХ портов

sudo lsof -n -i -P | grep -i TCP

Только для портов LISTEN

sudo lsof -n -i -P | grep -i LISTEN

Для определенного порта LISTEN, например: порт 80

sudo lsof -n -i -P | grep -i ":80 (LISTEN)"

Или, если вы просто хотите получить краткую сводку [сервис/приложения не описаны], зайдите в NETSTAT. Хорошая сторона здесь, не нужно sudo

netstat -an | grep 'LISTEN '

Объясняя используемые предметы:

-n подавить имя хоста

-i для протоколов IPv4 и IPv6

-P опустить имена портов

-a [over netstat] для всех сокетов

-n [по netstat] не разрешать имена

Протестировано на Высокой Сьерре 10.13.3

Кстати, последний синтаксис netstat работает и на Linux

Ответ 13

Это сделало то, что мне нужно.

ps -eaf | grep `lsof -t -i:$PORT`

Ответ 14

Я сделал небольшой script, чтобы видеть не только того, кто слушает, но и отображает установленные соединения и в какие страны. Работает на OSX Siera

#!/bin/bash
printf "\nchecking established connections\n\n"
for i in $(sudo lsof -i -n -P | grep TCP | grep ESTABLISHED | grep -v IPv6 | 
grep -v 127.0.0.1 | cut -d ">" -f2 | cut -d " " -f1 | cut -d ":" -f1); do
    printf "$i : " & curl freegeoip.net/xml/$i -s -S | grep CountryName | 
cut -d ">" -f2 | cut -d"<" -f1
done

printf "\ndisplaying listening ports\n\n"

sudo lsof -i -n -P | grep TCP | grep LISTEN | cut -d " " -f 1,32-35

#EOF

Sample output
checking established connections

107.178.244.155 : United States
17.188.136.186 : United States
17.252.76.19 : United States
17.252.76.19 : United States
17.188.136.186 : United States
5.45.62.118 : Netherlands
40.101.42.66 : Ireland
151.101.1.69 : United States
173.194.69.188 : United States
104.25.170.11 : United States
5.45.62.49 : Netherlands
198.252.206.25 : United States
151.101.1.69 : United States
34.198.53.220 : United States
198.252.206.25 : United States
151.101.129.69 : United States
91.225.248.133 : Ireland
216.58.212.234 : United States

displaying listening ports

mysqld TCP *:3306 (LISTEN)
com.avast TCP 127.0.0.1:12080 (LISTEN)
com.avast TCP [::1]:12080 (LISTEN)
com.avast TCP 127.0.0.1:12110 (LISTEN)
com.avast TCP [::1]:12110 (LISTEN)
com.avast TCP 127.0.0.1:12143 (LISTEN)
com.avast TCP [::1]:12143 (LISTEN)
com.avast TCP 127.0.0.1:12995 (LISTEN)
com.avast [::1]:12995 (LISTEN)
com.avast 127.0.0.1:12993 (LISTEN)
com.avast [::1]:12993 (LISTEN)
Google TCP 127.0.0.1:34013 (LISTEN)

Это может быть полезно проверить, подключены ли вы к северу-корее!; -)

Ответ 15

Это хороший способ для MacOS High Sierra:

netstat -an |grep -i listen

Ответ 16

Вдохновленный пользователем Brent Self:

lsof -i 4 -a | grep LISTEN

Ответ 17

Для macOS я использую две команды вместе, чтобы показать информацию о процессах, слушающих на машине, и процессах, подключающихся к удаленным серверам. Другими словами, чтобы проверить порты прослушивания и текущие (TCP) соединения на хосте, вы можете использовать две следующие команды вместе

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

Думаю, я добавлю свой вклад, надеюсь, это может в конечном итоге помочь кому-то.