Kto nasłuchuje na danym porcie TCP w systemie Mac OS X?

W Linuksie mogę użyć netstat -pntl | grep $PORT LUB fuser -n tcp $PORT aby dowiedzieć się, który proces (PID) nasłuchuje na podanym porcie TCP. Jak uzyskać te same informacje na temat systemu Mac OS X?

Author: pts, 2010-12-12

14 answers

W systemie macOS High Sierra użyj polecenia:

lsof -nP -i4TCP:$PORT | grep LISTEN

W starszych wersjach użyj jednej z następujących form:

lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN

Zastąp $PORT numerem portu lub oddzieloną przecinkami listą numerów portów.

Prepend sudo (po którym następuje spacja) jeśli potrzebujesz informacji o portach poniżej #1024.

Znacznik -n służy do wyświetlania adresów IP zamiast nazw hostów. To sprawia, że polecenie wykonuje się znacznie szybciej, ponieważ wyszukiwanie DNS w celu uzyskania nazw hostów może być powolne (kilka sekund lub minutę dla wielu hostów).

Znacznik -P służy do wyświetlania nieprzetworzonych numerów portów zamiast rozwiązanych nazw, takich jak http, ftp lub bardziej Ezoteryczne nazwy serwisów jak dpserve, socalia.

Zobacz komentarze, aby uzyskać więcej opcji.

 1501
Author: pts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-21 03:34:34

Możesz również użyć:

sudo lsof -i -n -P | grep TCP
To działa w Mavericks.
 382
Author: Rog182,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-22 22:13:59

Od wersji Yosemite (10.10), aż do High Sierra (10.13), każda wersja macOS obsługuje to:

sudo lsof -iTCP -sTCP:LISTEN -n -P
 348
Author: Michał Kalinowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-19 14:11:42

Aktualizacja Styczeń 2016

Dziwi mnie, że nikt nie zasugerował:
lsof -i :PORT_NUMBER

Aby uzyskać podstawowe informacje wymagane. Na przykład Sprawdzanie na porcie 1337:

lsof -i :1337

Inne odmiany w zależności od okoliczności:

sudo lsof -i :1337
lsof -i tcp:1337

Możesz łatwo zbudować na tym, aby wyodrębnić sam PID. Na przykład:

lsof -t -i :1337

Co jest również równoważne (w rezultacie) do tego polecenia:

lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID

Szybko ilustracja:

Tutaj wpisz opis obrazka

dla kompletności, ponieważ często używane razem:

Zabić PID:

kill -9 <PID>
# kill -9 60401

Lub jako jeden liner:

kill -9 $(lsof -t -i :1337)
 233
Author: arcseldon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-23 22:31:37

To działa w Mavericks (OSX 10.9.2).

sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
 79
Author: Charley Wu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-11 12:27:11

Na OS X możesz użyć opcji-v dla netstat, aby podać powiązany pid.

Typ:

netstat -anv | grep [.]PORT

Wynik będzie wyglądał następująco:

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

PID jest liczbą przed ostatnią kolumną, 3105 w tym przypadku

 28
Author: Sean Hamilton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-01 17:13:02

W systemie macOS, Oto prosty sposób na uzyskanie identyfikatora procesu, który nasłuchuje na określonym porcie za pomocą netstat. Ten przykład szuka procesu obsługującego zawartość na porcie 80:

Znajdź serwer działający na porcie 80

netstat -anv | egrep -w [.]80.*LISTEN

Przykładowe wyjście

tcp4  0 0  *.80       *.*    LISTEN      131072 131072    715      0

Druga z ostatniej kolumny to PID. Powyżej jest 715.

Opcje

-a - Pokaż wszystkie porty, w tym te używane przez serwery

-n - Pokaż numery, nie szukaj nazwisk. To sprawia, że komenda jest lot faster

-v - Dane wyjściowe, aby uzyskać identyfikatory procesów

-w - Szukaj słów. W przeciwnym razie polecenie zwróci informacje dla portów 8000 i 8001, a nie tylko "80"

LISTEN - podanie informacji tylko dla portów w trybie nasłuchu, tj. serwerów

 27
Author: johntellsall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-14 22:20:11

Na Snow Leopardzie (OS X 10.6.8), uruchomienie' man lsof ' daje:

lsof -i 4 -a

(rzeczywisty wpis ręczny to "lsof-i 4-a-p 1234")

Poprzednie odpowiedzi nie działały na Snow Leopardzie, ale próbowałem użyć 'netstat-nlp', dopóki nie zobaczyłem użycia 'lsof' w odpowiedzi przez pts.

 12
Author: Brent Self,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-25 19:14:09

W najnowszej wersji systemu macOS możesz użyć polecenia:

lsof -nP -i4TCP:$PORT | grep LISTEN

Jeśli trudno ci to zapamiętać, może powinieneś utworzyć bash funkcję i wyeksportować ją z bardziej przyjazną nazwą

vi ~/.bash_profile

A następnie dodaj następujące linie do tego pliku i zapisz go.

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

Teraz możesz wpisać listening_on 80 w swoim terminalu i sprawdzić, który proces nasłuchuje na porcie 80.

 12
Author: arturgrigor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-05 12:32:23

Jestem facetem od Linuksa. W Linuksie jest to niezwykle proste z netstat -ltpn lub dowolną kombinacją tych liter. Ale w Mac OS X netstat -an | grep LISTEN jest najbardziej humanitarny. Inne są bardzo brzydkie i bardzo trudne do zapamiętania podczas rozwiązywania problemów.

 10
Author: edib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-28 21:35:05
lsof -n -i | awk '{ print $1,$9; }' | sort -u
To pokazuje, kto co robi. Usuń -n, aby zobaczyć nazwy hostów (nieco wolniej).
 7
Author: Misha Tavkhelidze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-03 09:41:26

To było to, czego potrzebowałem.

ps -eaf | grep `lsof -t -i:$PORT`
 2
Author: Frank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-10 08:29:24

Zrobiłem mały skrypt, aby zobaczyć nie tylko kto gdzie słucha, ale także aby wyświetlić ustalone połączenia i do których krajów. Działa na 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)

To może być przydatne, aby sprawdzić, czy jesteś podłączony do Korei Północnej! ;-)

 0
Author: 0x00,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-03 10:19:08

To jest dobry sposób na macOS High Sierra:

netstat -an |grep -i listen
 0
Author: tr4nc3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-15 17:49:55