lsof и порты прослушивания

50

Я пытаюсь получить все процессы, прослушивающие сетевое соединение в Mac OS X. У netstatменя нет -pопции, и я пытаюсь с помощью lsof

lsof -i -sTCP:LISTEN

дает мне честный список процессов прослушивания, но не все. Я могу, например, telnet к порту 10080, где у меня есть процесс прослушивания соединения, но это не показано в выводе lsof. Чего мне не хватает?

$ telnet localhost 10080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> Connection closed.

но

$ sudo lsof -n -i | grep 10080
$
Matteo
источник
3
Говорит ли вывод lsof amandaвместо 10080?
Джон Лин
3
@JonLin Я не заметил, что -nвлияет только на адреса, а не порты. Чтобы получить номера портов, я должен использовать -Pтоже. Спасибо
Маттео
3
@JonLin: но у вас есть пост lsof -i -sTCP:LISTEN, и он без, -nи он не показал 10080 тоже. Таким образом, вы должны использовать -P.
Ханан Н.

Ответы:

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

Все возвращают те же 32 записи ( ... | wc -l) на моем сильно используемом Lion MBP.

-P -nпрепятствует lsofвыполнению разрешения имен и не блокирует Пропустить любой из них, это может быть очень медленно.

Для UDP: sudo lsof -iUDP -P -n | egrep -v '(127|::1)'. Без -nи -P, это занимает много времени.

Напоминание: сюда не входят настройки брандмауэра.

Барри А.
источник
3
Да, проблема была в пропаже -P. Я ошибочно предположил, что -nприменяется не только к IP-адресам, но и к номерам портов.
Маттео
-1
  1. Сначала выясните идентификатор процесса (pid), который занял требуемый порт (например, 5434):

    ps aux | grep 5434
    
  2. Убей этот процесс:

    kill -9 <pid>
    
Ашутош Гупта
источник
5
ps auxне перечисляет порты, используемые процессом
Matteo
Я согласен с Маттео; Вы уверены, что не сделали что-то вроде netstat -anp | grep 5434 (который вернет список материала, который прослушивает 5434, а первый или второй столбец - это pid?)
Foon
6
Таким образом, может работать только в ситуации, когда процесс вызывается с номером порта, заданным явно в строке выполнения, и эта часть строки будет соответствовать grep.
Techraf
1
Использование kill -9в качестве первого варианта для избавления от процесса является крайним выбором. Кроме того, это на самом деле не отвечает на вопрос, который заключается не в убийстве вещей, а в том, чтобы выяснить, что происходит.
Линдес