У меня есть PID определенного процесса, который прослушивает некоторые порты на моей OS X, и мне нужно знать, какой порт (ы) прослушивается этим процессом. Как мне это сделать?
Я знаю, что могу использовать, lsof
чтобы узнать, какой процесс прослушивает какой-либо порт, но мне нужно выполнить обратную операцию.
Спасибо.
UPD
OS X использует утилиты BSD, поэтому у меня BSD, а netstat
не Linux netstat
. В Linux netstat
есть -p
возможность показывать PID, BSD netstat
использует -p
для указания порта и не имеет возможности показывать PID.
networking
osx
bsd
Шау-котэ
источник
источник
netstat
могу сделать это для вас. Вы можетеgrep
использовать PID, если хотите отфильтровать выходные данныеnetstat
lsof
использование не только один способ. вы можете сделать что - то подобноеlsof|grep ${PID}
. который будет грубо сбрасывать все иgrep
будет выбирать строки с PID в них.netstat
не может отображать PID.Ответы:
Я нашел решение самостоятельно путем глубокого прочтения
man lsof
. (Да, RT * M все еще помогает.) Спасибо @Gilles за прицеливание.Вот решение:
lsof -aPi -p 555
(555 - PID).Объяснение:
-p
указать номер PID;-i
отображать только сетевые устройства;-a
И два условия выше (в противном случае они будут ИЛИ);-P
для отображения номеров портов (вместо имен портов по умолчанию).Кроме того, можно использовать
lsof -aPi4 -p 555
илиlsof -aPi6 -p 55
для адресов IPv4 или IP6 только соответственно.Если выходные данные будут проанализированы другой
-Fn
опцией программы, это может быть полезно. С этой опциейlsof
будет производиться «вывод для другой программы» вместо хорошего форматированного вывода.lsof -aPi4 -Fn -p 555
выведет что-то вроде этого:PS Все это я тестировал на своей OS X El Capitan, но, как я вижу, это должно работать и на Linux.
источник
lsof
предоставляет информацию о файлах, открытых процессами, включая сетевые порты. Он доступен практически во всех системах Unix, включая OSX .Rosetta Stone для Unix не перечислить любой другой инструмент для «процесса матча к файлу или порту» на OSX.
Чтобы вывести список процессов, прослушивающих порт TCP, вы можете использовать
lsof -iUDP
выводит список процессов с открытым сокетом UDP.lsof -i
перечисляет все открытые сетевые сокеты (клиенты TCP, серверы TCP и другие протоколы IP).источник
если вы хотите узнать, какой порт слушает, вы можете использовать опцию netstat -p. Вы должны быть суперпользователем:
если вы хотите узнать больше об этом попробуйте эту ссылку
источник
netstat
, у меня OS X и поэтому я использую BSDnetstat
. Он использует-p
для указания порта TCP / IP, и он не имеет возможности отображать PID.На FreeBSD вы можете использовать
sockstat
эту информацию. Я не уверен, есть ли у OS Xsockstat
, так как у меня нет Mac.Например, чтобы увидеть все соединения TCPv4:
sockstat -4
источник
sockstat
на моем Mac нет команды. :(Вы можете объединить netstat с помощью grep, awk и sed, чтобы показать порты с соответствующими им pids в Linux и Cygwin:
Подробнее
источник