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

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

1052
12 дек. '10 в 15:30
источник поделиться
17 ответов

В 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.

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

1594
12 дек. '10 в 15:39
источник

Связанные вопросы


Похожие вопросы

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

sudo lsof -i -n -P | grep TCP

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

401
23 янв. '14 в 1:13
источник

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

sudo lsof -iTCP -sTCP:LISTEN -n -P
386
04 мая '15 в 15:11
источник

Обновление января 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)
242
07 янв. '16 в 18:45
источник

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

sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
79
12 мая '14 в 6:33
источник

В 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, т.е. серверов

30
15 янв. '18 в 1:14
источник

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

Тип:

netstat -anv | grep [.]PORT

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

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

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

30
03 нояб. '15 в 11:06
источник

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

lsof -nP -i4TCP:$PORT | grep LISTEN

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

vi ~/.bash_profile

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

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

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

15
05 июня '18 в 15:32
источник

В 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.

12
25 авг. '13 в 22:14
источник

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

10
17 авг. '16 в 21:57
источник
lsof -n -i | awk '{ print $1,$9; }' | sort -u

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

7
03 мая '14 в 12:35
источник

Для 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

5
08 дек. '18 в 10:22
источник

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

ps -eaf | grep `lsof -t -i:$PORT`
3
10 мая '17 в 11:29
источник

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

netstat -an |grep -i listen
0
15 авг. '18 в 20:49
источник

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

lsof -i 4 -a | grep LISTEN

0
01 янв. '19 в 3:55
источник

Я сделал небольшой 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)

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

0
03 июля '17 в 13:19
источник

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

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

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

0
13 янв. '19 в 22:24
источник

Посмотрите другие вопросы по меткам или Задайте вопрос