Как узнать, какие порты прослушиваются определенным PID?

У меня есть PID определенного процесса, который прослушивает некоторые порты (ов) в моей ОС X, и мне нужно знать, какие порты (ы) прослушиваются этим процессом. Как мне это сделать?

Я знаю, что я могу использовать lsof чтобы узнать, какой процесс прослушивает какой-то порт, но мне нужно выполнить обратную операцию.

Спасибо.

UPD

OS X использует BSD utils, поэтому у меня BSD netstat не Linux netstat . Linux netstat имеет параметр -p для отображения PID, BSD netstat использует -p для указания порта и не имеет возможности показывать PID.

  • Как создать ярлык для изменения размеров панелей в окне tmux?
  • Я случайно удалил файл sudoers в Mac OS X; есть ли способ его восстановить?
  • NMAP-зондинг VirtualBox Client
  • Командная команда Unix не отправляет электронную почту
  • Как преобразовать имя месяца в число в дату BSD?
  • удаление элемента запуска из com.apple.launchd
  • Как скопировать все файлы HTML из дерева каталогов в один каталог
  • Управление несколькими Vims (vim и MacVim)
  • 4 Solutions collect form web for “Как узнать, какие порты прослушиваются определенным PID?”

    lsof предоставляет информацию о файлах, открытых процессами, включая сетевые порты. Он доступен практически во всех Unix-системах, включая OSX .

    Rosetta Stone для Unix не перечисляет какой-либо другой инструмент для «сопоставления процесса с файлом или портом» в OSX.

    Чтобы просмотреть процессы, прослушивающие TCP-порт, вы можете использовать

     lsof -iTCP -sTCP:LISTEN 

    lsof -iUDP перечисляет процессы, имеющие открытый UDP-сокет. lsof -i перечисляет все открытые сетевые сокеты (TCP-клиенты, TCP-серверы и другие IP-протоколы).

    Я нашел решение самостоятельно по глубокому чтению. (Да, RT * M по-прежнему помогает.) Спасибо @Gilles за прицеливание.

    Вот решение: lsof -aPi -p 555 (555 – PID).

    Объяснение:

    1. -p указать номер PID;
    2. -i отображать только сетевые устройства;
    3. -a to AND и два условия выше (иначе они будут ORed);
    4. -P для отображения номеров портов (вместо имени порта по умолчанию).

    Кроме того, можно использовать lsof -aPi4 -p 555 или lsof -aPi6 -p 55 для IPv4 или IP6 только для соответствующих адресов.

    Если вывод будет проанализирован другой программой, может оказаться полезным опция -Fn . С помощью этой опции lsof будет производить «вывод для другой программы» вместо хорошего форматированного вывода. lsof -aPi4 -Fn -p 555 выдаст что-то вроде этого:

     p554 nlocalhost:4321 

    PS Все это я тестировал на своей ОС X El Capitan, но, как я вижу, он тоже должен работать на Linux.

    В FreeBSD вы можете использовать sockstat для этой информации. Я не уверен, есть ли у OS X sockstat , так как у меня нет Mac.

    Например, чтобы увидеть все TCPv4-соединения:

    sockstat -4

    если вы хотите узнать, какой порт прослушивается, вы можете использовать опцию net-net.px вам нужно быть суперпользователем:

     $ sudo netstat -nlp | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 125004/nginx 

    если вы хотите узнать больше об этом, попробуйте эту ссылку

    Linux и Unix - лучшая ОС в мире.