Mac OS X'te belirli bir TCP bağlantı noktasını kim dinliyor?


1381

Linux'ta, belirtilen TCP bağlantı noktasını hangi işlemin (PID) dinlediğini bulmak için netstat -pntl | grep $PORTveya kullanabilirim fuser -n tcp $PORT. Aynı bilgileri Mac OS X'te nasıl edinebilirim?


27
Maalesef, netstat -p tcp | grep $PORTMac OS X'teki netstat PID'leri görüntüleyemediğinden PID'leri göstermiyor.
pts

12
netstat -anvMac OS X'te bağlantı noktasını görüntüler (kaynak: aşağıdaki çözüm @SeanHamiliton tarafından)
Curtis Yallop

Yanıtlar:


2048

MacOS High Sierra ve sonraki sürümlerinde şu komutu kullanın:

lsof -nP -iTCP:$PORT | grep LISTEN

veya sadece IPv4'ü görmek için:

lsof -nP -i4TCP:$PORT | grep LISTEN

Eski sürümlerde, aşağıdaki formlardan birini kullanın:

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

Yerine $PORTport numarası veya port numaraları virgülle ayrılmış listesini içerir.

sudo# 1024'ün altındaki bağlantı noktaları hakkında bilgiye ihtiyacınız varsa, başını ekleyin (ardından boşluk bırakın).

-nBayrak konak adları yerine IP adreslerini gösteren içindir. Bu, komutun daha hızlı yürütülmesini sağlar, çünkü ana bilgisayar adlarını almak için DNS aramaları yavaş olabilir (birçok ana bilgisayar için birkaç saniye veya bir dakika).

-PBayrak ham noktası numaralarını yerine gibi çözülmesi isimlerini gösteren içindir http, ftpya da benzeri daha ezoterik hizmet adları dpserve, socalia.

Daha fazla seçenek için yorumlara bakın.

Tamlık için, çünkü sıklıkla birlikte kullanılır:

PID'yi öldürmek için:

kill -9 <PID>
# kill -9 60401

153
Sahip sudoolmadığınız işlemleri görmek için bunu önekleyin.
Gordon Davisson

30
aslan, değişiklik ile çalıştısudo lsof -i TCP:$PORT | grep LISTEN
dhaval

58
Mountain Lion'da şunlara ihtiyacınız yok grep:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Siu Ching Pong -Asuka Kenji-

16
çok fazla aramadan sonra bu en iyisidir. komutu doğrudan kopyalamak isteyen kişiler $ PORT yerine gerçek bağlantı noktası numarası koymalı veya PORT değişkenini tanımlamalı ve bu gibi birden çok bağlantı noktası için: export PORT = 8080,4433; lsof -n -i4TCP: $ PORT
siddhusingh

2
Port araştırmak için 1024 1024 üzerinde ise sudo gerekmez.
stigkj

626

Snow Leopard (10.6), Mojave (10.14) ve Catalina'ya (10,15) kadar , macOS'un her sürümü bunu destekliyor:

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

Şahsen ben bu basit fonksiyon ile benim sonunda ~/.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
}

Ardından listeningcommand size bazı bağlantı noktalarını dinleyen işlemlerin bir listesini verir ve listening smthbunu bazı modeller için açar.

Buna sahip olarak, belirli bir işlem, örneğin listening dropboxliman veya ör listening 22.

lsofkomut, bağlantı noktası, protokol, işlem vb. hakkında sormak için bazı özel seçeneklere sahiptir, ancak kişisel olarak yukarıdaki işlevi çok daha kullanışlı buldum, çünkü tüm bu düşük düzey seçenekleri hatırlamam gerekmiyor. lsofoldukça güçlü bir araçtır, ancak ne yazık ki kullanımı çok rahat değildir.


7
Bu benim nokta dosyalarımda gidiyor. Birkaç ayda bir ararım ve her zaman bu cevaba gelirim.
danemacmillan

1
OP'nin söylediği gibi -pntl, tüm hizmetleri listeleyecek olan yanıtın kabul edilmesi gerektiğini hissediyorum . Kabul edilen cevap, uzaktan aynı olmayan bir veya daha fazla port numarası belirtilmesini ister.
seeafish

440

Ayrıca kullanabilirsiniz:

sudo lsof -i -n -P | grep TCP

Bu Mavericks'te çalışıyor.


3
-iSeçenek önemli ölçüde daha hızlı hale getirir. 0,02 saniye vs 2 saniye. Benim uygulamada bu oldukça fark yarattı.
Eric Boehs

bu özel bayraklar -i, -n, -P yapar. Tam olarak ne kastettiklerini hiçbir yerde bulamıyorum
Chad Watkins

sudo lsof -i -n -P | grep TCP | grep $ PORT - Bu komutla bir takma ad yaptım
alyn000r

"| Grep $ PORT" veya "| grep LISTEN" eklemenizi öneririm
KC Baltz

Harika! Mojave üzerinde de çalışır.
Gefilte Balık

291

Güncelleme Ocak 2016

Kimsenin önermediğini gerçekten şaşırttı:

lsof -i :PORT_NUMBER

gerekli temel bilgileri almak için. Örneğin, 1337 numaralı bağlantı noktasını denetleme:

lsof -i :1337

Koşullara bağlı olarak diğer varyasyonlar:

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

PID'nin kendisini çıkarmak için bunu kolayca oluşturabilirsiniz. Örneğin:

lsof -t -i :1337

ki bu da (sonuç olarak) bu komuta eşdeğerdir:

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

Hızlı gösterim:

resim açıklamasını buraya girin

Tamlık için, çünkü sıklıkla birlikte kullanılır:

PID'yi öldürmek için:

kill -9 <PID>
# kill -9 60401

veya bir astar olarak:

kill -9 $(lsof -t -i :1337)

2
Bu komut ayrıca dinleyici olmayan PID'leri görüntüler ve sorular yalnızca dinleyiciler için açıkça sorulur.
pts

3
Ayrıca koşabilirsiniz lsof -t -i :1338. -tişlem kimliğini döndürür, böylece awk / head yapmak zorunda kalmazsınız.
KFunk

kill -9 $(lsof -t -i :5000)El Capitan
Goksel

Bu harika. Onu öldürmeden önce orada ne olduğunu bilmeyi tercih ederim, bu yüzden (buna dayanarak) az önce bashrc'e ekledim:, whatsonport() { ps -ef | grep `lsof -t -i :$1` }yani:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
Sigfried

1
Teşekkürler, lsof -i :PORT_NUMBERbenim için bir iş yaptı.
marika.daboja


48

LISTEN, ESTABLISHED ve CLOSED bağlantı noktaları için

sudo lsof -n -i -P | grep TCP

Yalnızca LISTEN bağlantı noktaları için

sudo lsof -n -i -P | grep LISTEN

Belirli bir LISTEN bağlantı noktası için, örneğin: bağlantı noktası 80

sudo lsof -n -i -P | grep ':80 (LISTEN)'

Veya yalnızca özet bir özet istiyorsanız [hizmet / uygulama açıklanmadı] NETSTAT'e gidin. Burada iyi tarafı, sudo gerekmez

netstat -a -n | grep 'LISTEN '

Kullanılan kalemlerin açıklanması:

-n ana bilgisayar adını bastır

-i IPv4 ve IPv6 protokolleri için

-P bağlantı noktası adlarını atla

-a tüm soketler için [netstat üzerinden]

-n [netstat üzerinden] adları çözümlemez, ağ adreslerini sayılar olarak gösterir

High Sierra 10.13.3 ve Mojave 10.14.3 üzerinde test edildi

  • son sözdizimi netstat linux üzerinde de çalışır

Detay açıklamaları benim gibi yeni başlayanlar için gerçekten çok faydalı. teşekkürler @PYK
Tomaz Wang

46

OS X'te ilişkili pid'i vermek için netstat için -v seçeneğini kullanabilirsiniz.

yazın:

netstat -anv | grep [.]PORT

çıktı şu şekilde görünecektir:

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

PID, son sütundan önceki sayıdır, bu durumda 3105


Yalnızca grep LISTENdinleyicileri göstermek için de eklemeniz gerekir .
pts

3
İhtiyacım olan bu! lsofbağlantı noktasını bulamadı. ama netstataçık olduğunu gösterdi. -veksik gizli sos oldu.
Aaron McMillin

32

MacOS'ta, netstat ile belirli bir bağlantı noktasını dinleyen işlem kimliğini almanın kolay bir yolu . Bu örnek, bağlantı noktası 80'de içerik sunan bir işlemi arar:

80 numaralı bağlantı noktasında çalışan sunucuyu bul

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

örnek çıktı

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

Son sütundan ikinci, PID'dir. Yukarıda, 715 .

seçenekleri

-a - sunucular tarafından kullanılanlar dahil tüm bağlantı noktalarını göster

-n- numaraları göster, isimlere bakma. Bu, komutu çok daha hızlı hale getirir

-v - işlem kimliklerini almak için ayrıntılı çıktı

-w- kelimeleri ara. Aksi takdirde komut, yalnızca "80" değil, 8000 ve 8001 bağlantı noktaları için bilgi döndürür

LISTEN - yalnızca DİNLEME modundaki bağlantı noktaları, yani sunucular için bilgi verin


2
-v bayrağı yaptı
user9869932

18

En son macOS sürümünde bu komutu kullanabilirsiniz:

lsof -nP -i4TCP:$PORT | grep LISTEN

Hatırlamakta zorlanıyorsanız, belki bir bashişlev oluşturmalı ve böyle bir arkadaş adıyla dışa aktarmalısınız.

vi ~/.bash_profile

ve sonra bu dosyaya aşağıdaki satırları ekleyin ve kaydedin.

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

Artık listening_on 80Terminalinizi yazabilir ve bağlantı noktasında hangi işlemin dinlendiğini görebilirsiniz 80.


13

Snow Leopard'da (OS X 10.6.8), 'man lsof' koşusu şunları sağlar:

lsof -i 4 -a

(gerçek manuel giriş 'lsof -i 4 -a -p 1234'tür)

Önceki cevaplar Snow Leopard'da işe yaramadı, ama pts tarafından cevapta 'lsof' kullanımını görene kadar 'netstat -nlp' kullanmaya çalışıyordum.


10

Ben bir Linux adamıyım. Linux'ta netstat -ltpnbu harflerle veya bunların herhangi bir kombinasyonu ile son derece kolaydır . Ancak Mac OS X'te netstat -an | grep LISTENen insancıl. Diğerleri çok çirkin ve sorun giderme sırasında hatırlanması çok zordur.


2
Soru açıkça belirli bir TCP bağlantı noktası istedi ve komutlarınız tüm bağlantı noktalarındaki dinleyicileri gösteriyor.
puan

7
lsof -n -i | awk '{ print $1,$9; }' | sort -u

Bu kimin ne yaptığını gösterir. Ana bilgisayar adlarını görmek için -n öğesini kaldırın (biraz daha yavaş).


1
Cevabınız kötü değil, ancak birkaç yıl önce yüksek derecede onaylanmış birkaç cevap ve kabul edilen bir soru ile ilgili bir soru. Gelecekte, özellikle henüz yanıtlanmamış sorulara daha yakın tarihli sorulara odaklanmaya çalışın.

Bu komut TCP dışı portları ve dinleyici olmayanları da gösteriyor mu? Soru, yalnızca TCP bağlantı noktalarındaki dinleyicileri açıkça soruyor.
puan

If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
Lsof

@Misha Tavkhelidze: Yani dinleyici olmayanları da gösteriyor, bu yüzden soruyu cevaplamıyor.
pts

Ekle -sTCP:LISTENiçinlsof
Misha Tavkhelidze

3

İhtiyacım olan şey bu.

ps -eaf | grep `lsof -t -i:$PORT`

1

Sadece kimin nerede dinlediğini değil aynı zamanda kurulan bağlantıları ve hangi ülkelere gösterileceğini görmek için küçük bir senaryo hazırladım. OSX Siera üzerinde çalışır

#!/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)

Bu, Kuzey Kore'ye bağlı olup olmadığınızı kontrol etmek için yararlı olabilir! ;-)


0

MacOS High Sierra'da bu iyi bir yoldur:

netstat -an |grep -i listen

Bu oldukça doğru! Kabul edilen cevap aslında doğru yoldur ... mac os x üzerindeki netstat, port eşlemesine giden pid'i göstermez.
tr4nc3

0

Brent Brent kullanıcısından esinlenildi:

lsof -i 4 -a | grep LISTEN


0

MacOS için, makinede dinleme işlemleri ve uzak sunuculara bağlanma işlemleri hakkında bilgi göstermek için iki komutu birlikte kullanıyorum. Başka bir deyişle, bir ana bilgisayardaki dinleme bağlantı noktalarını ve geçerli (TCP) bağlantılarını denetlemek için aşağıdaki iki komutu birlikte kullanabilirsiniz

1. netstat -p tcp -p udp 

2. lsof -n -i4TCP -i4UDP 

Girişimi ekleyeceğimi düşündüm, umarım birisine yardım edebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.