Kto nasłuchuje na danym porcie TCP w systemie Mac OS X?
1381
W systemie Linux mogę użyć netstat -pntl | grep $PORTlub, fuser -n tcp $PORTaby dowiedzieć się, który proces (PID) nasłuchuje na określonym porcie TCP. Jak uzyskać te same informacje w systemie Mac OS X?
Zastąp $PORTnumer portu lub oddzieloną przecinkami listę numerów portów.
sudoJeśli potrzebujesz informacji o portach poniżej # 1024, dodaj (po której następuje spacja).
-nFlaga jest 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ć wolne (kilka sekund lub minuta dla wielu hostów).
-PFlaga jest do wyświetlania surowe numery portów zamiast nazwy, jak rozwiązane http, ftplub bardziej ezoterycznych nazw usług, takich jak dpserve, socalia.
Poprzedź to znakiem, sudoaby zobaczyć procesy, których nie jesteś właścicielem.
Gordon Davisson,
30
na lwie, pracował ze zmianąsudo lsof -i TCP:$PORT | grep LISTEN
dhaval
58
Na Mountain Lion nie potrzebujesz grep:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Siu Ching Pong -Asuka Kenji-
16
po tylu wyszukiwaniach ten jest najlepszy. ludzie, którzy bezpośrednio chcą skopiować polecenie, powinni zamienić $ PORT na rzeczywisty numer portu lub zdefiniować zmienną PORT i to również dla wielu portów, takich jak: export PORT = 8080,4433; lsof -n -i4TCP: $ PORT
siddhusingh
2
Nie trzeba sudo, jeśli port do zbadania jest
większy
626
Od wersji Snow Leopard (10.6), aż do Mojave (10.14) i Catalina (10,15) , każda wersja macOS obsługuje to:
sudo lsof -iTCP -sTCP:LISTEN -n -P
Osobiście skończyłem z tą prostą funkcją w moim ~/.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
}
Następnie listeningpolecenie wyświetla listę procesów nasłuchujących na niektórych portach ilistening smth grepuje to dla jakiegoś wzorca.
Mając to, dość łatwo jest zapytać o konkretny proces, np. listening dropboxPort, np listening 22.
lsofpolecenie ma pewne wyspecjalizowane opcje zapytań o port, protokół, proces itp., ale osobiście uważam, że powyższa funkcja jest o wiele bardziej przydatna, ponieważ nie muszę pamiętać wszystkich tych opcji niskiego poziomu. lsofjest dość potężnym narzędziem, ale niestety nie jest tak wygodne w użyciu.
To dzieje się w moich plikach dot. Przeszukuję co kilka miesięcy i zawsze napotykam tę odpowiedź.
danemacmillan
1
Uważam, że należy zaakceptować odpowiedź, tak jak OP powiedział, że tak -pntl, która zawiera listę wszystkich usług. Akceptowana odpowiedź wymaga podania jednego lub więcej numerów portów, co nie jest tym samym.
To polecenie wyświetla również PID nie będące odbiornikami, a pytania wyraźnie zadawane tylko dla słuchaczy.
pts
3
Możesz także biegać lsof -t -i :1338. -tzwróci identyfikator procesu, więc nie będziesz musiał przebudzać / head.
KFunk
Nic nie działało, oprócz kill -9 $(lsof -t -i :5000)el
capitan
To jest świetne. Wolę wiedzieć, co tam jest, zanim go zabiję, więc (w oparciu o to) właśnie dodałem do mojego bashrc:, whatsonport() { ps -ef | grep `lsof -t -i :$1` }więc:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
Sigfried
1
Dzięki, lsof -i :PORT_NUMBERzrobiłem dla mnie robotę.
Musisz także dodać, grep LISTENaby pokazać tylko słuchaczy.
pts
3
Właśnie tego potrzebowałem! lsofnie mogłem znaleźć portu. ale netstatpokazał, że jest otwarty. -vbył sekretny sos, którego mi brakowało.
Aaron McMillin
32
W systemie macOS jest prosty sposób na uzyskanie identyfikatora procesu, który nasłuchuje na określonym porcie za pomocą netstat . W tym przykładzie szuka procesu obsługującego zawartość na porcie 80:
znajdź serwer działający na porcie 80
netstat -anv | egrep -w [.]80.*LISTEN
próbka wyjściowa
tcp4 0 0 *.80 *.* LISTEN 131072 131072 715 0
Drugim z ostatniej kolumny jest PID. Powyżej jest 715 .
opcje
-a - pokaż wszystkie porty, w tym te używane przez serwery
-n- pokaż liczby, nie szukaj nazw. To sprawia, że polecenie jest znacznie szybsze
-v - pełne wyjście, aby uzyskać identyfikatory procesu
-w- wyszukiwane słowa. W przeciwnym razie polecenie zwróci informacje dla portów 8000 i 8001, a nie tylko „80”
LISTEN - podaj informacje tylko dla portów w trybie LISTEN, tj. serwerów
W systemie Snow Leopard (OS X 10.6.8) uruchomienie „man lsof” daje:
lsof -i 4 -a
(rzeczywiste ręczne wprowadzanie to „lsof -i 4 -a -p 1234”)
Poprzednie odpowiedzi nie działały na systemie Snow Leopard, ale próbowałem użyć „netstat -nlp”, dopóki nie zobaczyłem użycia „lsof” w odpowiedzi przez pts.
Jestem facetem z Linuksa. W Linuksie jest to niezwykle łatwe z netstat -ltpndowolną kombinacją tych liter. Ale w Mac OS X netstat -an | grep LISTENjest najbardziej humanitarny. Inne są bardzo brzydkie i bardzo trudne do zapamiętania podczas rozwiązywania problemów.
Twoja odpowiedź nie jest zła, ale dotyczy pytania z kilkoma bardzo pozytywnymi odpowiedziami i jedną z wielu lat temu. W przyszłości postaraj się skupić na nowszych pytaniach, zwłaszcza tych, na które jeszcze nie udzielono odpowiedzi.
Czy to polecenie wyświetla również porty inne niż TCP, a także nie nasłuchuje? Pytanie wyraźnie dotyczy słuchaczy tylko na portach TCP.
pts
Według strony If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
podręcznika lsof
@Misha Tavkhelidze: Więc wyświetla również osoby nie słuchające, więc nie odpowiada na pytanie.
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)
Może to być przydatne, aby sprawdzić, czy jesteś podłączony do Korei Północnej! ;-)
W systemie macOS używam dwóch poleceń razem, aby wyświetlić informacje o procesach nasłuchujących na komputerze i procesach łączenia się ze zdalnymi serwerami. Innymi słowy, aby sprawdzić porty nasłuchujące i bieżące połączenia (TCP) na hoście, możesz użyć dwóch poniższych poleceń razem
1. netstat -p tcp -p udp
2. lsof -n -i4TCP -i4UDP
Pomyślałem, że dodam swój wkład, mam nadzieję, że w końcu może komuś pomóc.
netstat -p tcp | grep $PORT
nie wyświetla PID, ponieważ netstat na Mac OS X nie może wyświetlać PID.netstat -anv
wyświetla port w Mac OS X (źródło: rozwiązanie poniżej autorstwa @SeanHamiliton)Odpowiedzi:
W systemie macOS High Sierra i nowszych użyj tego polecenia:
lub po prostu zobaczyć tylko IPv4:
W starszych wersjach użyj jednej z następujących formularzy:
Zastąp
$PORT
numer portu lub oddzieloną przecinkami listę numerów portów.sudo
Jeśli potrzebujesz informacji o portach poniżej # 1024, dodaj (po której następuje spacja).-n
Flaga jest 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ć wolne (kilka sekund lub minuta dla wielu hostów).-P
Flaga jest do wyświetlania surowe numery portów zamiast nazwy, jak rozwiązanehttp
,ftp
lub bardziej ezoterycznych nazw usług, takich jakdpserve
,socalia
.Zobacz komentarze, aby uzyskać więcej opcji.
Dla kompletności, ponieważ często używane razem:
Aby zabić PID:
źródło
sudo
aby zobaczyć procesy, których nie jesteś właścicielem.sudo lsof -i TCP:$PORT | grep LISTEN
grep
:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Od wersji Snow Leopard (10.6), aż do Mojave (10.14) i Catalina (10,15) , każda wersja macOS obsługuje to:
sudo lsof -iTCP -sTCP:LISTEN -n -P
Osobiście skończyłem z tą prostą funkcją w moim
~/.bash_profile
:Następnie
listening
polecenie wyświetla listę procesów nasłuchujących na niektórych portach ilistening smth
grepuje to dla jakiegoś wzorca.Mając to, dość łatwo jest zapytać o konkretny proces, np.
listening dropbox
Port, nplistening 22
.lsof
polecenie ma pewne wyspecjalizowane opcje zapytań o port, protokół, proces itp., ale osobiście uważam, że powyższa funkcja jest o wiele bardziej przydatna, ponieważ nie muszę pamiętać wszystkich tych opcji niskiego poziomu.lsof
jest dość potężnym narzędziem, ale niestety nie jest tak wygodne w użyciu.źródło
-pntl
, która zawiera listę wszystkich usług. Akceptowana odpowiedź wymaga podania jednego lub więcej numerów portów, co nie jest tym samym.Możesz także użyć:
Działa to w Mavericks.
źródło
-i
opcja znacznie przyspiesza. 0,02 sekundy vs 2 sekundy. W mojej aplikacji robiło to różnicę.Aktualizacja ze stycznia 2016 r
Naprawdę zaskoczony nikt nie sugerował:
aby uzyskać wymagane podstawowe informacje. Na przykład sprawdzanie portu 1337:
Inne warianty, w zależności od okoliczności:
Możesz łatwo to wykorzystać, aby wyodrębnić sam PID. Na przykład:
co jest również równoważne (w wyniku) z tym poleceniem:
Szybka ilustracja:
Dla kompletności, ponieważ często używane razem:
Aby zabić PID:
lub jako jedna wkładka:
źródło
lsof -t -i :1338
.-t
zwróci identyfikator procesu, więc nie będziesz musiał przebudzać / head.kill -9 $(lsof -t -i :5000)
elwhatsonport() { ps -ef | grep `lsof -t -i :$1` }
więc:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
lsof -i :PORT_NUMBER
zrobiłem dla mnie robotę.Działa to w Mavericks (OSX 10.9.2).
źródło
Dla portów LISTEN, ESTABLISHED i CLOSED
Tylko dla portów LISTEN
Dla konkretnego portu LISTEN, np .: port 80
Lub jeśli chcesz tylko zwięzłe podsumowanie [nie opisano usługi / aplikacji], skorzystaj z NETSTAT. Dobrą stroną jest to, że sudo nie jest potrzebne
Wyjaśnienie używanych przedmiotów:
-n pomiń nazwę hosta
-i dla protokołów IPv4 i IPv6
-P pomiń nazwy portów
-a [over netstat] dla wszystkich gniazd
-n [over netstat] nie rozpoznaje nazw, pokazuje adresy sieciowe jako liczby
źródło
w systemie OS X można użyć opcji -v dla netstat, aby podać powiązany pid.
rodzaj:
wynik będzie wyglądał następująco:
PID to liczba przed ostatnią kolumną, 3105 w tym przypadku
źródło
grep LISTEN
aby pokazać tylko słuchaczy.lsof
nie mogłem znaleźć portu. alenetstat
pokazał, że jest otwarty.-v
był sekretny sos, którego mi brakowało.W systemie macOS jest prosty sposób na uzyskanie identyfikatora procesu, który nasłuchuje na określonym porcie za pomocą netstat . W tym przykładzie szuka procesu obsługującego zawartość na porcie 80:
znajdź serwer działający na porcie 80
próbka wyjściowa
Drugim z ostatniej kolumny jest PID. Powyżej jest 715 .
opcje
-a
- pokaż wszystkie porty, w tym te używane przez serwery-n
- pokaż liczby, nie szukaj nazw. To sprawia, że polecenie jest znacznie szybsze-v
- pełne wyjście, aby uzyskać identyfikatory procesu-w
- wyszukiwane słowa. W przeciwnym razie polecenie zwróci informacje dla portów 8000 i 8001, a nie tylko „80”LISTEN
- podaj informacje tylko dla portów w trybie LISTEN, tj. serwerówźródło
W najnowszej wersji systemu macOS możesz użyć tego polecenia:
Jeśli trudno ci zapamiętać, być może powinieneś utworzyć
bash
funkcję i wyeksportować ją pod bardziej przyjazną nazwąa następnie dodaj następujące wiersze do tego pliku i zapisz go.
Teraz możesz wpisać
listening_on 80
swój Terminal i zobaczyć, który proces nasłuchuje na porcie80
.źródło
W systemie Snow Leopard (OS X 10.6.8) uruchomienie „man lsof” daje:
(rzeczywiste ręczne wprowadzanie to „lsof -i 4 -a -p 1234”)
Poprzednie odpowiedzi nie działały na systemie Snow Leopard, ale próbowałem użyć „netstat -nlp”, dopóki nie zobaczyłem użycia „lsof” w odpowiedzi przez pts.
źródło
Jestem facetem z Linuksa. W Linuksie jest to niezwykle łatwe z
netstat -ltpn
dowolną kombinacją tych liter. Ale w Mac OS Xnetstat -an | grep LISTEN
jest najbardziej humanitarny. Inne są bardzo brzydkie i bardzo trudne do zapamiętania podczas rozwiązywania problemów.źródło
Wyświetla kto co robi. Usuń -n, aby zobaczyć nazwy hostów (nieco wolniej).
źródło
If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
-sTCP:LISTEN
dolsof
Zrobiłem to, czego potrzebowałem.
źródło
Zrobiłem mały skrypt, aby zobaczyć nie tylko, kto nas słucha, ale także, aby wyświetlić ustanowione połączenia i do jakich krajów. Działa na OSX Siera
Może to być przydatne, aby sprawdzić, czy jesteś podłączony do Korei Północnej! ;-)
źródło
To dobry sposób na macOS High Sierra:
źródło
Inspirowany przez użytkownika Brent Self:
lsof -i 4 -a | grep LISTEN
źródło
W systemie macOS używam dwóch poleceń razem, aby wyświetlić informacje o procesach nasłuchujących na komputerze i procesach łączenia się ze zdalnymi serwerami. Innymi słowy, aby sprawdzić porty nasłuchujące i bieżące połączenia (TCP) na hoście, możesz użyć dwóch poniższych poleceń razem
Pomyślałem, że dodam swój wkład, mam nadzieję, że w końcu może komuś pomóc.
źródło