В Linux я могу использовать netstat -pntl | grep $PORTили, fuser -n tcp $PORTчтобы узнать, какой процесс (PID) прослушивает указанный порт TCP. Как получить ту же информацию в Mac OS X?
Замените $PORTна номер порта или список номеров портов через запятую.
sudoЕсли вам нужна информация о портах ниже # 1024, добавьте (после пробела).
-nФлаг для отображения IP - адреса вместо имен хостов. Это заставляет команду выполняться намного быстрее, потому что поиск DNS для получения имен хостов может быть медленным (несколько секунд или минут для многих хостов).
-PФлаг для отображения сырых номеров портов вместо разрешенных имен , как http, ftpили более эзотерические имена сервисов , таких как dpserve, socalia.
Смотрите комментарии для получения дополнительной информации.
Для полноты, потому что часто используется вместе:
Добавьте к этому префикс, sudoчтобы увидеть процессы, которые вам не принадлежат.
Гордон Дэвиссон
30
на льве, работал со сменойsudo lsof -i TCP:$PORT | grep LISTEN
дхавал
58
На Горного Льва вам не нужно grep:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Сиу Чинг Понг - Асука Кенджи -
16
после стольких поисков этот лучший. люди, которые хотят напрямую скопировать команду, должны заменить $ PORT на фактический номер порта или определить переменную PORT, и это также для нескольких портов, таких как: export PORT = 8080,4433; lsof -n -i4TCP: $ PORT
siddhusingh
2
Не нужно sudo, если исследуемый порт выше 1024.
stigkj
627
Начиная с Snow Leopard (10.6), вплоть до Mojave (10.14) и Catalina (10,15) , каждая версия macOS поддерживает это:
sudo lsof -iTCP -sTCP:LISTEN -n -P
Лично я в конечном итоге с этой простой функцией в моем ~/.bash_profile:
listening() {
if [ $# -eq 0 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P
elif [ $# -eq 1 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
else
echo "Usage: listening [pattern]"
fi
}
Затем listeningкоманда listening smthвыводит список процессов, прослушивающих какой-либо порт, и отображает их для некоторого шаблона.
Имея это, довольно легко спросить о конкретном процессе, например listening dropbox, или порту, например listening 22.
lsofУ команды есть несколько специализированных опций для запроса порта, протокола, процесса и т. д., но лично я обнаружил, что вышеупомянутая функция гораздо удобнее, поскольку мне не нужно запоминать все эти низкоуровневые опции. lsofэто довольно мощный инструмент, но, к сожалению, не так удобно использовать.
Это происходит в моих точечных файлах. Я ищу каждые несколько месяцев и всегда сталкиваюсь с этим ответом.
danemacmillan
1
Я чувствую, что это должен быть принят ответ, поскольку OP сказал, что он делает -pntl, который перечислит все услуги. Принятый ответ запрашивает один или несколько номеров портов, которые не являются удаленными.
Эта команда также отображает PID, не относящиеся к прослушивателю, и вопросы, заданные явно только для слушателей.
оч
3
Вы также можете запустить lsof -t -i :1338. -tвернет идентификатор процесса, так что вам не придется awk / head.
KFunk
Ничто не сработало, кроме как kill -9 $(lsof -t -i :5000)на el capitan
goksel
Это замечательно. Я предпочитаю знать, что там, прежде чем убить его, поэтому (основываясь на этом) я просто добавил в свой bashrc:, whatsonport() { ps -ef | grep `lsof -t -i :$1` }так что:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
Sigfried
1
Спасибо, lsof -i :PORT_NUMBERсделал работу для меня.
Вы также должны добавить, grep LISTENчтобы показать только слушателям.
оч
3
Это то, что мне было нужно! lsofне смог найти порт. но netstatпоказал, что это было открыто. -vбыл секретный соус мне не хватало.
Аарон Макмиллин
32
В macOS есть простой способ получить идентификатор процесса, который прослушивает определенный порт с помощью 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, то есть для серверов
Я парень из Linux. В Linux это очень легко с netstat -ltpnлюбой комбинацией этих букв. Но в Mac OS X netstat -an | grep LISTENсамая гуманная. Другие очень уродливы и их трудно запомнить при поиске неисправностей.
Ваш ответ неплох, но он на вопрос с несколькими высоко оцененными ответами, и один из них был принят несколько лет назад. В будущем постарайтесь сосредоточиться на более свежих вопросах, особенно на тех, на которые еще нет ответа.
Эта команда также отображает не TCP-порты и не слушатели? Вопрос явно касается слушателей только на портах TCP.
Очки
Согласно справочной странице lsof (8): If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
Миша Тавхелидзе
@ Миша Тавхелидзе: Значит, он также отображает не слушателей, поэтому не отвечает на вопрос.
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)
Это может быть полезно, чтобы проверить, если вы подключены к Северной Корее! ;-)
Для macOS я использую две команды вместе, чтобы показать информацию о процессах, слушающих на машине, и процессах, подключающихся к удаленным серверам. Другими словами, чтобы проверить порты прослушивания и текущие (TCP) соединения на хосте, вы можете использовать две следующие команды вместе
1. netstat -p tcp -p udp
2. lsof -n -i4TCP -i4UDP
Думаю, я добавлю свой вклад, надеюсь, это может в конечном итоге помочь кому-то.
netstat -p tcp | grep $PORT
PID не отображаются, поскольку netstat в Mac OS X не может отображать PID.netstat -anv
отображает порт в Mac OS X (источник: решение ниже @SeanHamiliton)Ответы:
В macOS High Sierra и более поздних версиях используйте эту команду:
или просто посмотреть только IPv4:
В старых версиях используйте одну из следующих форм:
Замените
$PORT
на номер порта или список номеров портов через запятую.sudo
Если вам нужна информация о портах ниже # 1024, добавьте (после пробела).-n
Флаг для отображения IP - адреса вместо имен хостов. Это заставляет команду выполняться намного быстрее, потому что поиск DNS для получения имен хостов может быть медленным (несколько секунд или минут для многих хостов).-P
Флаг для отображения сырых номеров портов вместо разрешенных имен , какhttp
,ftp
или более эзотерические имена сервисов , таких какdpserve
,socalia
.Смотрите комментарии для получения дополнительной информации.
Для полноты, потому что часто используется вместе:
Чтобы убить PID:
источник
sudo
чтобы увидеть процессы, которые вам не принадлежат.sudo lsof -i TCP:$PORT | grep LISTEN
grep
:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Начиная с Snow Leopard (10.6), вплоть до Mojave (10.14) и Catalina (10,15) , каждая версия macOS поддерживает это:
sudo lsof -iTCP -sTCP:LISTEN -n -P
Лично я в конечном итоге с этой простой функцией в моем
~/.bash_profile
:Затем
listening
командаlistening smth
выводит список процессов, прослушивающих какой-либо порт, и отображает их для некоторого шаблона.Имея это, довольно легко спросить о конкретном процессе, например
listening dropbox
, или порту, напримерlistening 22
.lsof
У команды есть несколько специализированных опций для запроса порта, протокола, процесса и т. д., но лично я обнаружил, что вышеупомянутая функция гораздо удобнее, поскольку мне не нужно запоминать все эти низкоуровневые опции.lsof
это довольно мощный инструмент, но, к сожалению, не так удобно использовать.источник
-pntl
, который перечислит все услуги. Принятый ответ запрашивает один или несколько номеров портов, которые не являются удаленными.Вы также можете использовать:
Это работает в Маверикс.
источник
-i
Вариант делает его значительно быстрее. 0,02 секунды против 2 секунд. В моем приложении это имело значение.Обновление январь 2016
Действительно удивленный, никто не предложил:
чтобы получить основную информацию требуется. Например, проверка порта 1337:
Другие варианты, в зависимости от обстоятельств:
Вы можете легко использовать это для извлечения самого PID. Например:
что также эквивалентно (в результате) этой команде:
Быстрая иллюстрация:
Для полноты, потому что часто используется вместе:
Чтобы убить PID:
или как один вкладыш:
источник
lsof -t -i :1338
.-t
вернет идентификатор процесса, так что вам не придется awk / head.kill -9 $(lsof -t -i :5000)
на el capitanwhatsonport() { ps -ef | grep `lsof -t -i :$1` }
так что:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
lsof -i :PORT_NUMBER
сделал работу для меня.Это работает в Mavericks (OSX 10.9.2).
источник
Для LISTEN, УСТАНОВЛЕННЫХ и ЗАКРЫТЫХ портов
Только для LISTEN портов
Для определенного порта LISTEN, например: порт 80
Или, если вы просто хотите получить краткую сводку [сервис / приложения не описаны], обратитесь в NETSTAT. Хорошая сторона здесь, не нужно sudo
Объясняя используемые предметы:
-n подавить имя хоста
-i для протоколов IPv4 и IPv6
-P опустить имена портов
-a [через netstat] для всех сокетов
-n [over netstat] не разрешать имена, показывать сетевые адреса в виде чисел
источник
в OS X вы можете использовать опцию -v для netstat, чтобы дать связанный pid.
тип:
вывод будет выглядеть так:
PID - это номер перед последним столбцом, 3105 для этого случая
источник
grep LISTEN
чтобы показать только слушателям.lsof
не смог найти порт. ноnetstat
показал, что это было открыто.-v
был секретный соус мне не хватало.В macOS есть простой способ получить идентификатор процесса, который прослушивает определенный порт с помощью netstat . Этот пример ищет процесс, обслуживающий контент на порту 80:
найти сервер, работающий на порту 80
образец вывода
Второй из последнего столбца - это PID. Вверху это 715 .
опции
-a
- показать все порты, в том числе используемые серверами-n
- показывать числа, не искать имена. Это делает команду намного быстрее-v
- подробный вывод, чтобы получить идентификаторы процесса-w
- поиск слов. В противном случае команда вернет информацию для портов 8000 и 8001, а не только "80"LISTEN
- предоставлять информацию только для портов в режиме LISTEN, то есть для серверовисточник
В последней версии macOS вы можете использовать эту команду:
Если вам трудно запомнить, то, возможно, вам следует создать
bash
функцию и экспортировать ее с более дружелюбным именем, напримера затем добавьте следующие строки в этот файл и сохраните его.
Теперь вы можете ввести
listening_on 80
свой терминал и посмотреть, какой процесс прослушивает порт80
.источник
На Snow Leopard (OS X 10.6.8) при запуске man lsof выдается:
(фактический ручной ввод - 'lsof -i 4 -a -p 1234')
Предыдущие ответы не работали на Snow Leopard, но я пытался использовать netstat -nlp, пока не увидел использование lsof в ответе pts.
источник
Я парень из Linux. В Linux это очень легко с
netstat -ltpn
любой комбинацией этих букв. Но в Mac OS Xnetstat -an | grep LISTEN
самая гуманная. Другие очень уродливы и их трудно запомнить при поиске неисправностей.источник
Это показывает, кто что делает. Удалите -n, чтобы увидеть имена хостов (немного медленнее).
источник
If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
-sTCP:LISTEN
кlsof
Это сделал то, что мне было нужно.
источник
Я сделал небольшой сценарий, чтобы увидеть не только, кто где слушает, но и показать установленные связи и с какими странами. Работает на OSX Siera
Это может быть полезно, чтобы проверить, если вы подключены к Северной Корее! ;-)
источник
Это хороший способ для MacOS High Sierra:
источник
Вдохновленный пользователем Brent Self:
lsof -i 4 -a | grep LISTEN
источник
Для macOS я использую две команды вместе, чтобы показать информацию о процессах, слушающих на машине, и процессах, подключающихся к удаленным серверам. Другими словами, чтобы проверить порты прослушивания и текущие (TCP) соединения на хосте, вы можете использовать две следующие команды вместе
Думаю, я добавлю свой вклад, надеюсь, это может в конечном итоге помочь кому-то.
источник